openapi: 3.1.0
info:
  title: Fourthwall APIs
  description: Service used for management of orders, carts, and payments.
  termsOfService: https://fourthwall.com/terms-of-service
  contact:
    name: Backend team
    url: https://fourthwall.com
    email: backend@fourthwall.com
  version: unspecified
externalDocs:
  description: OpenAPI documentation
  url: https://docs.fourthwall.com
servers:
  - url: https://api.fourthwall.com
    description: Production server
paths:
  /open-api/v1.0/webhooks/{webhookConfigurationId}:
    get:
      tags:
        - Webhooks
      summary: Get a webhook
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Get a webhook
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/webhooks/get-webhook
      operationId: get-webhook
      parameters:
        - name: webhookConfigurationId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.WebhookConfigurationV1"
        "404":
          description: "Possible errors: `WEBHOOK_CONFIGURATION_NOT_FOUND`"
          content:
            application/json:
              examples:
                webhook-configuration-not-found:
                  value:
                    code: WEBHOOK_CONFIGURATION_NOT_FOUND
                    webhookConfigurationId: <webhookconfigurationid>
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - webhook_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    put:
      tags:
        - Webhooks
      summary: Update a webhook
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Update a webhook
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/webhooks/update-webhook
      operationId: update-webhook
      parameters:
        - name: webhookConfigurationId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.OpenApiWebhookC\
                onfigurationEndpoint.WebhookConfigurationUpdateRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.WebhookConfigurationV1"
        "400":
          description: "Possible errors:
            `WEBHOOK_CONFIGURATION_NOT_UPDATABLE_OR_DELETABLE`,
            `WEBHOOK_URI_IP_NOT_ALLOWED`, `WEBHOOK_URI_PORT_NOT_ALLOWED`,
            `WEBHOOK_URI_UNALLOWED_DOMAIN`"
          content:
            application/json:
              examples:
                webhook-configuration-not-updatable-or-deletable:
                  value:
                    code: WEBHOOK_CONFIGURATION_NOT_UPDATABLE_OR_DELETABLE
                    webhookConfigurationId: <webhookconfigurationid>
                    shopId: <shopid>
                webhook-uri-ip-not-allowed:
                  value:
                    code: WEBHOOK_URI_IP_NOT_ALLOWED
                webhook-uri-port-not-allowed:
                  value:
                    code: WEBHOOK_URI_PORT_NOT_ALLOWED
                webhook-uri-unallowed-domain:
                  value:
                    code: WEBHOOK_URI_UNALLOWED_DOMAIN
        "404":
          description: "Possible errors: `WEBHOOK_CONFIGURATION_NOT_FOUND`"
          content:
            application/json:
              examples:
                webhook-configuration-not-found:
                  value:
                    code: WEBHOOK_CONFIGURATION_NOT_FOUND
                    webhookConfigurationId: <webhookconfigurationid>
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - webhook_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    delete:
      tags:
        - Webhooks
      summary: Delete a webhook
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Delete a webhook
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/webhooks/delete-webhook
      operationId: delete-webhook
      parameters:
        - name: webhookConfigurationId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
        "400":
          description: "Possible errors: `WEBHOOK_CONFIGURATION_NOT_UPDATABLE_OR_DELETABLE`"
          content:
            application/json:
              examples:
                webhook-configuration-not-updatable-or-deletable:
                  value:
                    code: WEBHOOK_CONFIGURATION_NOT_UPDATABLE_OR_DELETABLE
                    webhookConfigurationId: <webhookconfigurationid>
                    shopId: <shopid>
        "404":
          description: "Possible errors: `WEBHOOK_CONFIGURATION_NOT_FOUND`"
          content:
            application/json:
              examples:
                webhook-configuration-not-found:
                  value:
                    code: WEBHOOK_CONFIGURATION_NOT_FOUND
                    webhookConfigurationId: <webhookconfigurationid>
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - webhook_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/streaming/start:
    put:
      tags:
        - Streaming
      summary: Set streaming status to started
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Sets streaming status to started for specified services
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/streaming/start-streaming
      operationId: start-streaming
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.StreamingStarte\
                dRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.StreamingStatusV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/streaming/end:
    put:
      tags:
        - Streaming
      summary: Set streaming status to ended
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Sets streaming status to ended for specified services
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/streaming/end-streaming
      operationId: end-streaming
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.StreamingEndedR\
                equest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.StreamingStatusV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/public-token:
    put:
      tags:
        - Shop
      summary: Get or create a public token
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns an existing public token for the shop, or creates a new one if
        none exists
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/shop/get-public-token
      operationId: get-public-token
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.OpenApiShopEndp\
                  oint.PublicTokenResponse"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - shop_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/promotions/{promotionId}:
    get:
      tags:
        - Promotions
      summary: Get a promotion by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns a promotion by id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/promotions/get-promotion
      operationId: get-promotion
      parameters:
        - name: promotionId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.AutoApplyin\
                      gShopPromotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiMember\
                      shipsPromotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiShopPr\
                      omotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.SingleMembe\
                      rshipsPromotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.SingleShopP\
                      romotionV1"
        "400":
          description: "Possible errors: `CHECKOUT_PROMOTION_DOES_NOT_EXISTS`"
          content:
            application/json:
              examples:
                checkout-promotion-does-not-exists:
                  value:
                    code: CHECKOUT_PROMOTION_DOES_NOT_EXISTS
                    id: <promotionid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - promotions_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/products/{productId}/state:
    put:
      tags:
        - Products (offers)
      summary: Update product (offer) lifecycle state
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Transitions the product between `PUBLIC` and `HIDDEN`. Use `DELETE
        /products/{productId}` to archive — `ARCHIVED` is not reachable here.
        The sold-out (`available`) flag is preserved; flip it via `PUT
        /products/{productId}/availability`. Idempotent: no-op if the product is
        already in the requested state.
      operationId: update-product-state
      parameters:
        - name: productId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProductStateV1Request"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferF\
                  ullV1"
        "400":
          description: "Possible errors: `OFFER_INVALID_STATE_ERROR`"
          content:
            application/json:
              examples:
                offer-invalid-state-error:
                  value:
                    code: OFFER_INVALID_STATE_ERROR
                    offerId: <offerid>
                    state: <offersimplestatus>
        "404":
          description: "Possible errors: `OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR`,
            `OFFER_VARIANT_NOT_FOUND_ERROR`,
            `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                offer-not-found-by-shop-id-and-id-error:
                  value:
                    code: OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR
                    shopId: <shopid>
                    offerId: <offerid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "409":
          description: "Possible errors: `SQL_CONSTRAINTS_ERROR`"
          content:
            application/json:
              examples:
                sql-constraints-error:
                  value:
                    code: SQL_CONSTRAINTS_ERROR
                    table: <string?>
                    constraint: <string?>
                    msg: <string?>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/products/{productId}/availability:
    put:
      tags:
        - Products (offers)
      summary: Update product (offer) availability by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Updates a product (offer) availability
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/products/update-product-availability
      operationId: update-product-availability
      parameters:
        - name: productId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.OpenApiProductE\
                ndpoint.UpdateOfferAvailabilityV1Request"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferF\
                  ullV1"
        "400":
          description: "Possible errors: `OFFER_MUST_HAVE_COSTS_ERROR`,
            `OFFER_NOT_BUYABLE_WHEN_A_DEMO_ERROR`"
          content:
            application/json:
              examples:
                offer-must-have-costs-error:
                  value:
                    code: OFFER_MUST_HAVE_COSTS_ERROR
                    offerId: <offerid>
                offer-not-buyable-when-a-demo-error:
                  value:
                    code: OFFER_NOT_BUYABLE_WHEN_A_DEMO_ERROR
                    offerId: <offerid>
        "404":
          description: "Possible errors: `OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR`"
          content:
            application/json:
              examples:
                offer-not-found-by-shop-id-and-id-error:
                  value:
                    code: OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR
                    shopId: <shopid>
                    offerId: <offerid>
        "409":
          description: "Possible errors: `SQL_CONSTRAINTS_ERROR`"
          content:
            application/json:
              examples:
                sql-constraints-error:
                  value:
                    code: SQL_CONSTRAINTS_ERROR
                    table: <string?>
                    constraint: <string?>
                    msg: <string?>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/order/{orderId}/downloaded:
    put:
      tags:
        - Orders
      summary: Mark digital download as downloaded
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Marks digital download as downloaded. If no downloads exist for a
        digital order and defaultFileUrl is provided in the request body,
        creates a download with that URL and marks it as downloaded.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/orders/mark-download-complete
      operationId: mark-download-complete
      parameters:
        - name: orderId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.OpenApiOrderEnd\
                point.MarkDownloadAsDownloadedRequest"
      responses:
        "200":
          description: OK
        "400":
          description: "Possible errors: `ORDER_HAS_NO_DOWNLOADS_ERROR`"
          content:
            application/json:
              examples:
                order-has-no-downloads-error:
                  value:
                    code: ORDER_HAS_NO_DOWNLOADS_ERROR
                    orderId: <orderid>
        "404":
          description: "Possible errors: `DOWNLOAD_NOT_FOUND_ERROR`,
            `OFFER_VARIANT_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                download-not-found-error:
                  value:
                    code: DOWNLOAD_NOT_FOUND_ERROR
                    downloadId: <downloadid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - order_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/gifting/draw/{id}/finish:
    put:
      tags:
        - Gifting
      summary: Finish draw
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Finish draw and select winners
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/gifting/finish-draw
      operationId: finish-draw
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.DrawFinishedReq\
                uest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1"
        "400":
          description: "Possible errors: `GIVEAWAY_DRAW_ALREADY_FINISHED`,
            `GIVEAWAY_DRAW_FINISHED_DATA_MISMATCH`,
            `GIVEAWAY_DRAW_UNSUPPORTED_PLATFORM_OPERATION`"
          content:
            application/json:
              examples:
                giveaway-draw-already-finished:
                  value:
                    code: GIVEAWAY_DRAW_ALREADY_FINISHED
                    drawId: <giveawaydrawid>
                giveaway-draw-finished-data-mismatch:
                  value:
                    code: GIVEAWAY_DRAW_FINISHED_DATA_MISMATCH
                    availableGifts: <int>
                    participants: <int>
                giveaway-draw-unsupported-platform-operation:
                  value:
                    code: GIVEAWAY_DRAW_UNSUPPORTED_PLATFORM_OPERATION
                    platform: <giveawaydraw.platform>
        "404":
          description: "Possible errors: `GIVEAWAY_DRAW_NOT_FOUND`,
            `GIVEAWAY_NOT_FOUND_FOR_DRAW_ID`, `OFFER_NOT_FOUND_ERROR`,
            `OFFER_VARIANT_NOT_FOUND_ERROR`,
            `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                giveaway-draw-not-found:
                  value:
                    code: GIVEAWAY_DRAW_NOT_FOUND
                    drawId: <giveawaydrawid>
                giveaway-not-found-for-draw-id:
                  value:
                    code: GIVEAWAY_NOT_FOUND_FOR_DRAW_ID
                    shopId: <shopid>
                    drawId: <giveawaydrawid>
                offer-not-found-error:
                  value:
                    code: OFFER_NOT_FOUND_ERROR
                    offerId: <offerid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/collections/{collectionId}:
    put:
      tags:
        - Collections
      summary: Update a collection
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Updates collection name, description, and/or product list
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/collections/update-collection
      operationId: update-collection
      parameters:
        - name: collectionId
          in: path
          required: true
          schema:
            type: string
          example: col_b1EVARkUTcCTSfspQaXr1Q
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.UpdateCollectionV1Requ\
                est"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionV1"
        "400":
          description: "Possible errors: `COLLECTION_OFFERS_ALREADY_MODIFIED_ERROR`,
            `COLLECTION_UNSUPPORTED_UPDATE_DETAILS_OPERATION_ERROR`"
          content:
            application/json:
              examples:
                collection-offers-already-modified-error:
                  value:
                    code: COLLECTION_OFFERS_ALREADY_MODIFIED_ERROR
                    collectionId: <collectionid>
                collection-unsupported-update-details-operation-error:
                  value:
                    code: COLLECTION_UNSUPPORTED_UPDATE_DETAILS_OPERATION_ERROR
                    collectionId: <collectionid>
                    slug: <slug>
        "404":
          description: "Possible errors: `COLLECTION_NOT_FOUND_BY_ID_ERROR`,
            `COLLECTION_OFFERS_NOT_FOUND`"
          content:
            application/json:
              examples:
                collection-not-found-by-id-error:
                  value:
                    code: COLLECTION_NOT_FOUND_BY_ID_ERROR
                    id: <collectionid>
                collection-offers-not-found:
                  value:
                    code: COLLECTION_OFFERS_NOT_FOUND
                    shopId: <shopid>
                    offerIds: <list>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/collections/{collectionId}/products:
    get:
      tags:
        - Collections
      summary: Get products in a collection
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns paginated products in a collection with optional status
        filtering. The maximum page size is 100 - larger values are capped at
        100.
      operationId: get-collection-products
      parameters:
        - name: collectionId
          in: path
          required: true
          schema:
            type: string
          example: col_b1EVARkUTcCTSfspQaXr1Q
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
        - name: status
          in: query
          description: Filter by product status
          required: false
          schema:
            type: string
            description: Filter for product status in a collection
            enum:
              - PUBLIC
              - AVAILABLE
              - SOLD_OUT
              - HIDDEN
              - ARCHIVED
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.OfferAbstractV1.OfferFullV1"
        "404":
          description: "Possible errors: `COLLECTION_NOT_FOUND_BY_ID_AND_SHOP_ID_ERROR`,
            `OFFER_VARIANT_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                collection-not-found-by-id-and-shop-id-error:
                  value:
                    code: COLLECTION_NOT_FOUND_BY_ID_AND_SHOP_ID_ERROR
                    shopId: <shopid>
                    id: <collectionid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    put:
      tags:
        - Collections
      summary: Set collection products
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Sets the full list of product IDs in the collection
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/collections/update-collection-products
      operationId: update-collection-products
      parameters:
        - name: collectionId
          in: path
          required: true
          schema:
            type: string
          example: col_b1EVARkUTcCTSfspQaXr1Q
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.UpdateCollectionProduc\
                tsV1Request"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionV1"
        "400":
          description: "Possible errors: `COLLECTION_OFFERS_ALREADY_MODIFIED_ERROR`,
            `COLLECTION_UNSUPPORTED_UPDATE_DETAILS_OPERATION_ERROR`"
          content:
            application/json:
              examples:
                collection-offers-already-modified-error:
                  value:
                    code: COLLECTION_OFFERS_ALREADY_MODIFIED_ERROR
                    collectionId: <collectionid>
                collection-unsupported-update-details-operation-error:
                  value:
                    code: COLLECTION_UNSUPPORTED_UPDATE_DETAILS_OPERATION_ERROR
                    collectionId: <collectionid>
                    slug: <slug>
        "404":
          description: "Possible errors: `COLLECTION_NOT_FOUND_BY_ID_ERROR`,
            `COLLECTION_OFFERS_NOT_FOUND`"
          content:
            application/json:
              examples:
                collection-not-found-by-id-error:
                  value:
                    code: COLLECTION_NOT_FOUND_BY_ID_ERROR
                    id: <collectionid>
                collection-offers-not-found:
                  value:
                    code: COLLECTION_OFFERS_NOT_FOUND
                    shopId: <shopid>
                    offerIds: <list>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/collections/{collectionId}/availability:
    put:
      tags:
        - Collections
      summary: Update collection availability
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Toggle collection availability (available/unavailable)
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/collections/update-collection-availability
      operationId: update-collection-availability
      parameters:
        - name: collectionId
          in: path
          required: true
          schema:
            type: string
          example: col_b1EVARkUTcCTSfspQaXr1Q
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.UpdateCollectionAvaila\
                bilityV1Request"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionV1"
        "400":
          description: "Possible errors:
            `COLLECTION_UNSUPPORTED_UPDATE_AVAILABILITY_OPERATION_ERROR`"
          content:
            application/json:
              examples:
                collection-unsupported-update-availability-operation-error:
                  value:
                    code: COLLECTION_UNSUPPORTED_UPDATE_AVAILABILITY_OPERATION_ERROR
                    collectionId: <collectionid>
                    slug: <slug>
        "404":
          description: "Possible errors: `COLLECTION_NOT_FOUND_BY_ID_AND_SHOP_ID_ERROR`,
            `COLLECTION_NOT_FOUND_BY_ID_ERROR`"
          content:
            application/json:
              examples:
                collection-not-found-by-id-and-shop-id-error:
                  value:
                    code: COLLECTION_NOT_FOUND_BY_ID_AND_SHOP_ID_ERROR
                    shopId: <shopid>
                    id: <collectionid>
                collection-not-found-by-id-error:
                  value:
                    code: COLLECTION_NOT_FOUND_BY_ID_ERROR
                    id: <collectionid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/webhooks:
    get:
      tags:
        - Webhooks
      summary: Get webhooks
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Get webhooks
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/webhooks/list-webhooks
      operationId: list-webhooks
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.WebhookConfigurationV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - webhook_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    post:
      tags:
        - Webhooks
      summary: Create a webhook
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Create a webhook
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/webhooks/create-webhook
      operationId: create-webhook
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.OpenApiWebhookC\
                onfigurationEndpoint.WebhookConfigurationCreateRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.WebhookConfigurationV1"
        "400":
          description: "Possible errors: `WEBHOOK_URI_IP_NOT_ALLOWED`,
            `WEBHOOK_URI_PORT_NOT_ALLOWED`, `WEBHOOK_URI_UNALLOWED_DOMAIN`"
          content:
            application/json:
              examples:
                webhook-uri-ip-not-allowed:
                  value:
                    code: WEBHOOK_URI_IP_NOT_ALLOWED
                webhook-uri-port-not-allowed:
                  value:
                    code: WEBHOOK_URI_PORT_NOT_ALLOWED
                webhook-uri-unallowed-domain:
                  value:
                    code: WEBHOOK_URI_UNALLOWED_DOMAIN
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - webhook_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/thank-you-contributions/{id}:
    post:
      tags:
        - Thank yous
      summary: Create thank you for contribution
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Upload thank you media for a contribution (order, donation, membership,
        etc.)
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/thank-yous/create-thank-you
      operationId: create-thank-you
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          example: kd_EdJvIXu3SEiXe_QkPavHSA
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
              required:
                - file
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouV1"
        "400":
          description: "Possible errors: `KUDOS_CONTRIBUTION_IN_INCORRECT_STATE`,
            `PII_GUARD_INVALID_REQUEST`"
          content:
            application/json:
              examples:
                kudos-contribution-in-incorrect-state:
                  value:
                    code: KUDOS_CONTRIBUTION_IN_INCORRECT_STATE
                    kudosId: <kudosid>
                    state: <kudosstate>
                pii-guard-invalid-request:
                  value:
                    code: PII_GUARD_INVALID_REQUEST
                    reason: <string>
        "403":
          description: "Possible errors: `PII_GUARD_ACCESS_DENIED`"
          content:
            application/json:
              examples:
                pii-guard-access-denied:
                  value:
                    code: PII_GUARD_ACCESS_DENIED
                    reason: <string>
        "404":
          description: "Possible errors: `KUDOS_CONTRIBUTION_DOES_NOT_EXIST`,
            `PII_GUARD_RECORD_NOT_FOUND`"
          content:
            application/json:
              examples:
                kudos-contribution-does-not-exist:
                  value:
                    code: KUDOS_CONTRIBUTION_DOES_NOT_EXIST
                    kudosId: <kudosid>
                pii-guard-record-not-found:
                  value:
                    code: PII_GUARD_RECORD_NOT_FOUND
                    id: <piidataid>
        "406":
          description: "Possible errors: `KUDOS_UNSUPPORTED_MEDIA_TYPE`"
          content:
            application/json:
              examples:
                kudos-unsupported-media-type:
                  value:
                    code: KUDOS_UNSUPPORTED_MEDIA_TYPE
                    allowedMediaType: <string>
                    providedMediaType: <string>
        "409":
          description: "Possible errors: `KUDOS_THANK_YOU_DUPLICATION`"
          content:
            application/json:
              examples:
                kudos-thank-you-duplication:
                  value:
                    code: KUDOS_THANK_YOU_DUPLICATION
                    kudosId: <kudosid>
                    thankYouId: <thankyouid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - thankyou_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/promotions:
    get:
      tags:
        - Promotions
      summary: Get all promotions
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all promotions. The maximum page size is 100 - larger values are
        capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/promotions/list-promotions
      operationId: list-promotions
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
        - name: codes
          in: query
          description: Filter by promotion code(s)
          required: false
          schema:
            type: array
            items:
              type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.promotions.PromotionV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - promotions_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    post:
      tags:
        - Promotions
      summary: Create a promotion
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Creates a promotion
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/promotions/create-promotion
      operationId: create-promotion
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: "#/components/schemas/MEMBERSHIPS_MULTI"
                - $ref: "#/components/schemas/MEMBERSHIPS_SINGLE"
                - $ref: "#/components/schemas/SHOP_MULTI"
                - $ref: "#/components/schemas/SHOP_SINGLE"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.AutoApplyin\
                      gShopPromotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiMember\
                      shipsPromotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiShopPr\
                      omotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.SingleMembe\
                      rshipsPromotionV1"
                  - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.SingleShopP\
                      romotionV1"
        "400":
          description: "Possible errors:
            `PROMOTION_ONCE_PER_ORDER_CONFIGURATION_NOT_SUPPORTER_FOR_DISCOUNT_\
            TYPE`, `PROMOTION_ONLY_ONE_TIERS_REQUIREMENT_TYPE_ALLOWED`"
          content:
            application/json:
              examples:
                promotion-once-per-order-configuration-not-supporter-for-discount-type:
                  value:
                    code: PROMOTION_ONCE_PER_ORDER_CONFIGURATION_NOT_SUPPORTER_FOR_DISCOUNT_TYPE
                promotion-only-one-tiers-requirement-type-allowed:
                  value:
                    code: PROMOTION_ONLY_ONE_TIERS_REQUIREMENT_TYPE_ALLOWED
        "409":
          description: "Possible errors: `PROMOTION_CODE_DUPLICATION`,
            `PROMOTION_CODES_DUPLICATION`"
          content:
            application/json:
              examples:
                promotion-code-duplication:
                  value:
                    code: PROMOTION_CODE_DUPLICATION
                    promotionCode: <string>
                promotion-codes-duplication:
                  value:
                    code: PROMOTION_CODES_DUPLICATION
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - promotions_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/products:
    get:
      tags:
        - Products (offers)
      summary: Get all products (offers)
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all products with pagination. The maximum page size is 100 -
        larger values are capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/products/list-products
      operationId: list-products
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
        - name: search
          in: query
          required: false
          schema:
            type: string
          example: search_phrase
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.OfferAbstractV1.OfferFullV1"
        "404":
          description: "Possible errors: `OFFER_VARIANT_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    post:
      tags:
        - Products (offers)
      summary: Create a product
      description: >-
        *Rate limit: 5 requests / minute per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Creates a product from a design or a digital product.
      operationId: create-product
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.offer.CreateProductReq\
                uestV1"
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.offer.CreateProductRes\
                  ponseV1"
        "400":
          description: "Possible errors: `CUSTOMIZATION_ALREADY_USED_ERROR`,
            `CUSTOMIZATION_FOR_REQUESTABLE_PRODUCT_ERROR`,
            `CUSTOMIZATION_OPTION_DO_NOT_EXISTS`,
            `CUSTOMIZATION_REGIONS_DUPLICATION`,
            `CUSTOMIZATION_TOO_MANY_VARIANTS`,
            `DESIGN_PIPELINE_BACKEND_RENDERING_NOT_SUPPORTED`,
            `DESIGN_PIPELINE_INVALID_REGIONS`,
            `DESIGNER_NOT_SUPPORTED_PRODUCT_ERROR`,
            `DIGITAL_ITEMS_NOT_VALID_ERROR`, `DIGITAL_ITEMS_SIZE_LIMIT_ERROR`,
            `MISSING_VERSION_ERROR`, `OFFER_CREATION_NOT_ALLOWED_ERROR`,
            `RENDERING_PRODUCT_NOT_SUPPORTED_ERROR`,
            `TOTAL_DIGITAL_STORAGE_LIMIT_ERROR`, `UNTRUSTED_ASSET_SOURCE_ERROR`"
          content:
            application/json:
              examples:
                customization-already-used-error:
                  value:
                    code: CUSTOMIZATION_ALREADY_USED_ERROR
                    customizationId: <customizationid?>
                customization-for-requestable-product-error:
                  value:
                    code: CUSTOMIZATION_FOR_REQUESTABLE_PRODUCT_ERROR
                    productId: <productid>
                customization-option-do-not-exists:
                  value:
                    code: CUSTOMIZATION_OPTION_DO_NOT_EXISTS
                    type: <string>
                    name: <string>
                    productId: <productid>
                customization-regions-duplication:
                  value:
                    code: CUSTOMIZATION_REGIONS_DUPLICATION
                    regions: <list>
                customization-too-many-variants:
                  value:
                    code: CUSTOMIZATION_TOO_MANY_VARIANTS
                    newColorCount: <int>
                    newSizeCount: <int>
                    newVariantCount: <int>
                    max: <int>
                design-pipeline-backend-rendering-not-supported:
                  value:
                    code: DESIGN_PIPELINE_BACKEND_RENDERING_NOT_SUPPORTED
                    reason: <string>
                design-pipeline-invalid-regions:
                  value:
                    code: DESIGN_PIPELINE_INVALID_REGIONS
                    invalidRegions: <set>
                    validRegions: <set>
                designer-not-supported-product-error:
                  value:
                    code: DESIGNER_NOT_SUPPORTED_PRODUCT_ERROR
                    productId: <productid>
                digital-items-not-valid-error:
                  value:
                    code: DIGITAL_ITEMS_NOT_VALID_ERROR
                    offerId: <offerid>
                    digitalFiles: <collection>
                digital-items-size-limit-error:
                  value:
                    code: DIGITAL_ITEMS_SIZE_LIMIT_ERROR
                    offerId: <offerid>
                    sizeLimit: <long>
                missing-version-error:
                  value:
                    code: MISSING_VERSION_ERROR
                    customizationId: <customizationid>
                offer-creation-not-allowed-error:
                  value:
                    code: OFFER_CREATION_NOT_ALLOWED_ERROR
                    shopId: <shopid>
                rendering-product-not-supported-error:
                  value:
                    code: RENDERING_PRODUCT_NOT_SUPPORTED_ERROR
                    productId: <string>
                total-digital-storage-limit-error:
                  value:
                    code: TOTAL_DIGITAL_STORAGE_LIMIT_ERROR
                    offerId: <offerid>
                    sizeLimit: <long>
                untrusted-asset-source-error:
                  value:
                    code: UNTRUSTED_ASSET_SOURCE_ERROR
                    uri: <uri>
        "403":
          description: "Possible errors: `SAAS_OPERATION_NOT_ALLOWED_ERROR`"
          content:
            application/json:
              examples:
                saas-operation-not-allowed-error:
                  value:
                    code: SAAS_OPERATION_NOT_ALLOWED_ERROR
                    operation: <saasoperation.type>
                    shopId: <shopid>
                    planUpgradeable: <boolean>
        "404":
          description: "Possible errors: `MEDIA_FILE_DO_NOT_EXISTS`,
            `PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND`,
            `RENDERING_NOT_SCHEDULED_ERROR`"
          content:
            application/json:
              examples:
                media-file-do-not-exists:
                  value:
                    code: MEDIA_FILE_DO_NOT_EXISTS
                    uri: <uri>
                product-catalog-product-id-not-found:
                  value:
                    code: PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND
                    id: <productid>
                rendering-not-scheduled-error:
                  value:
                    code: RENDERING_NOT_SCHEDULED_ERROR
                    customizationId: <string>
        "406":
          description: "Possible errors: `PRICING_CALCULATION_NOT_SUPPORTED`"
          content:
            application/json:
              examples:
                pricing-calculation-not-supported:
                  value:
                    code: PRICING_CALCULATION_NOT_SUPPORTED
                    customizationType: <customizationversiontype>
        "409":
          description: "Possible errors: `OFFER_SLUG_DUPLICATION_ERROR`,
            `SQL_CONSTRAINTS_ERROR`"
          content:
            application/json:
              examples:
                offer-slug-duplication-error:
                  value:
                    code: OFFER_SLUG_DUPLICATION_ERROR
                    shopId: <shopid>
                    offerSlug: <slug>
                sql-constraints-error:
                  value:
                    code: SQL_CONSTRAINTS_ERROR
                    table: <string?>
                    constraint: <string?>
                    msg: <string?>
        "429":
          description: |-
            Rate limited: 5 requests / minute per shop (effective limit).

            All applicable limits:
            - `open-api-heavy-rate-limiter` — 5 requests / minute per shop
            - `open-api-rate-limiter` — 100 requests / 10 seconds per shop
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 5
        periodSeconds: 60
        dimension: shopId
        cacheName: open-api-heavy-rate-limiter
        applies:
          - cacheName: open-api-heavy-rate-limiter
            filterOrder: 10
            capacity: 5
            periodSeconds: 60
            dimension: shopId
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/platform/token:
    post:
      tags:
        - Platform Tokens
      summary: Exchange authorization code or refresh token for access token
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        OAuth 2.0 token endpoint. Supports 'authorization_code' grant type for
        exchanging authorization codes for tokens, and 'refresh_token' grant
        type for refreshing access tokens.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/platform-token/exchange-token
      operationId: exchange-token
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.TokenRequest"
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.TokenRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/media/upload-url:
    post:
      tags:
        - Media Library
      summary: Request a pre-signed upload URL
      description: >-
        *Rate limit: 20 requests / minute per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns a pre-signed upload URL for uploading a new image. After
        receiving the response, PUT the image bytes directly to the uploadUrl.
      operationId: request-media-upload-url
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.media.RequestUploadUrl\
                V1"
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.media.UploadUrlRespons\
                  eV1"
        "406":
          description: "Possible errors: `MEDIA_FILE_SIZE_EXCEEDED_ERROR`,
            `UNSUPPORTED_ASSET_TYPE_ERROR`, `UNSUPPORTED_MEDIA_TYPE_ERROR`"
          content:
            application/json:
              examples:
                media-file-size-exceeded-error:
                  value:
                    code: MEDIA_FILE_SIZE_EXCEEDED_ERROR
                    maxFileSize: <long>
                    fileSize: <long>
                unsupported-asset-type-error:
                  value:
                    code: UNSUPPORTED_ASSET_TYPE_ERROR
                    assetType: <assettype>
                unsupported-media-type-error:
                  value:
                    code: UNSUPPORTED_MEDIA_TYPE_ERROR
                    mediaType: <string>
                    supportedMediaTypes: <list>
        "429":
          description: |-
            Rate limited: 20 requests / minute per shop (effective limit).

            All applicable limits:
            - `open-api-medium-rate-limiter` — 20 requests / minute per shop
            - `open-api-rate-limiter` — 100 requests / 10 seconds per shop
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - media_write
        - basicAuth: []
      x-rate-limit:
        capacity: 20
        periodSeconds: 60
        dimension: shopId
        cacheName: open-api-medium-rate-limiter
        applies:
          - cacheName: open-api-medium-rate-limiter
            filterOrder: 10
            capacity: 20
            periodSeconds: 60
            dimension: shopId
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/media/images:
    get:
      tags:
        - Media Library
      summary: List media library images
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Retrieves all images from the shop's media library
      operationId: list-media-images
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.media.MediaImageV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - media_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    post:
      tags:
        - Media Library
      summary: Save an uploaded image to the media library
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Persists an uploaded image in the media library after the client has PUT
        it to the signed URL
      operationId: save-media-image
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.media.SaveMediaImageRe\
                questV1"
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.media.MediaImageV1"
        "400":
          description: "Possible errors: `UNTRUSTED_ASSET_SOURCE_ERROR`"
          content:
            application/json:
              examples:
                untrusted-asset-source-error:
                  value:
                    code: UNTRUSTED_ASSET_SOURCE_ERROR
                    uri: <uri>
        "404":
          description: "Possible errors: `MEDIA_FILE_DO_NOT_EXISTS`"
          content:
            application/json:
              examples:
                media-file-do-not-exists:
                  value:
                    code: MEDIA_FILE_DO_NOT_EXISTS
                    uri: <uri>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - media_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/giveaway-links:
    post:
      tags:
        - Giveaway links
      summary: Create giveaway links
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Creates a new package with specified number of giveaway links
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/giveaway-links/create-giveaway-links
      operationId: create-giveaway-links
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.CreateGiveawayL\
                inksV1Request"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1"
        "400":
          description: "Possible errors: `GIFT_INVALID_OFFER`"
          content:
            application/json:
              examples:
                gift-invalid-offer:
                  value:
                    code: GIFT_INVALID_OFFER
                    offerId: <offerid>
                    shopId: <shopid>
        "404":
          description: "Possible errors: `OFFER_NOT_FOUND_ERROR`,
            `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                offer-not-found-error:
                  value:
                    code: OFFER_NOT_FOUND_ERROR
                    offerId: <offerid>
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/fulfillments:
    post:
      tags:
        - Fulfillment
      summary: Create a fulfillment for an order
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Creates a fulfillment with a shipment tracker for provided order items.
        When trackers change their state, order.status will change to
        IN_PRODUCTION, PARTIALLY_IN_PRODUCTION, PARTIALLY_SHIPPED, SHIPPED
        depending on the shipping tracker info. Order updated webhooks will be
        triggered.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/fulfillment/create-fulfillment
      operationId: create-fulfillment
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.FulfillmentRequ\
                est"
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.FulfillmentResp\
                  onse"
        "400":
          description: "Possible errors: `FULFILLMENT_ALREADY_EXISTS`,
            `FULFILLMENT_ORDER_INVALID_VARIANT`,
            `FULFILLMENT_VARIANT_QUANTITY_TO_HIGH`"
          content:
            application/json:
              examples:
                fulfillment-already-exists:
                  value:
                    code: FULFILLMENT_ALREADY_EXISTS
                    fulfillmentId: <fulfillmentid>
                    orderId: <orderid>
                fulfillment-order-invalid-variant:
                  value:
                    code: FULFILLMENT_ORDER_INVALID_VARIANT
                    orderId: <orderid>
                    variantId: <offervariantid>
                    groupedId: <cartitemgroupedid?>
                fulfillment-variant-quantity-to-high:
                  value:
                    code: FULFILLMENT_VARIANT_QUANTITY_TO_HIGH
                    orderId: <orderid>
                    variantId: <offervariantid>
                    fulfillable: <int>
                    quantity: <int>
        "404":
          description: "Possible errors: `FULFILLMENT_INVALID_SHOP_ORDER`,
            `FULFILLMENT_ORDER_NOT_FOUND`, `OFFER_VARIANT_NOT_FOUND_ERROR`,
            `ORDER_ID_NOT_FOUND`"
          content:
            application/json:
              examples:
                fulfillment-invalid-shop-order:
                  value:
                    code: FULFILLMENT_INVALID_SHOP_ORDER
                    shopId: <shopid?>
                    orderId: <orderid>
                fulfillment-order-not-found:
                  value:
                    code: FULFILLMENT_ORDER_NOT_FOUND
                    orderId: <orderid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
                order-id-not-found:
                  value:
                    code: ORDER_ID_NOT_FOUND
                    id: <orderid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - fulfillment_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/customizations:
    post:
      tags:
        - Customizations
      summary: Create a customization (design sketch)
      description: >-
        *Rate limit: 5 requests / minute per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Creates a shop-bound customization sketch on a product template. When
        `regions` are supplied, the sync design pipeline runs immediately and
        the response carries the rendered preview images. With no regions, only
        the sketch is created (`pipelineId: null`, `images: []`). Iteration =
        re-POST with adjusted selections; there is no update-in-place.
      operationId: create-customization
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateCustomizationRequestV1"
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateCustomizationResponseV1"
        "400":
          description: "Possible errors: `CUSTOMIZATION_ALREADY_USED_ERROR`,
            `CUSTOMIZATION_FOR_REQUESTABLE_PRODUCT_ERROR`,
            `CUSTOMIZATION_OPTION_DO_NOT_EXISTS`,
            `CUSTOMIZATION_REGIONS_DUPLICATION`,
            `CUSTOMIZATION_TOO_MANY_VARIANTS`,
            `DESIGN_PIPELINE_BACKEND_RENDERING_NOT_SUPPORTED`,
            `DESIGN_PIPELINE_INVALID_REGIONS`,
            `DESIGNER_NOT_SUPPORTED_PRODUCT_ERROR`,
            `MISSING_PRICE_FOR_SIZE_ERROR`, `MISSING_VERSION_ERROR`,
            `OFFER_INVALID_STATE_ERROR`,
            `RENDERING_PRODUCT_NOT_SUPPORTED_ERROR`,
            `UNTRUSTED_ASSET_SOURCE_ERROR`, `VARIANT_MISSING_SIZE_ERROR`"
          content:
            application/json:
              examples:
                customization-already-used-error:
                  value:
                    code: CUSTOMIZATION_ALREADY_USED_ERROR
                    customizationId: <customizationid?>
                customization-for-requestable-product-error:
                  value:
                    code: CUSTOMIZATION_FOR_REQUESTABLE_PRODUCT_ERROR
                    productId: <productid>
                customization-option-do-not-exists:
                  value:
                    code: CUSTOMIZATION_OPTION_DO_NOT_EXISTS
                    type: <string>
                    name: <string>
                    productId: <productid>
                customization-regions-duplication:
                  value:
                    code: CUSTOMIZATION_REGIONS_DUPLICATION
                    regions: <list>
                customization-too-many-variants:
                  value:
                    code: CUSTOMIZATION_TOO_MANY_VARIANTS
                    newColorCount: <int>
                    newSizeCount: <int>
                    newVariantCount: <int>
                    max: <int>
                design-pipeline-backend-rendering-not-supported:
                  value:
                    code: DESIGN_PIPELINE_BACKEND_RENDERING_NOT_SUPPORTED
                    reason: <string>
                design-pipeline-invalid-regions:
                  value:
                    code: DESIGN_PIPELINE_INVALID_REGIONS
                    invalidRegions: <set>
                    validRegions: <set>
                designer-not-supported-product-error:
                  value:
                    code: DESIGNER_NOT_SUPPORTED_PRODUCT_ERROR
                    productId: <productid>
                missing-price-for-size-error:
                  value:
                    code: MISSING_PRICE_FOR_SIZE_ERROR
                    size: <string>
                missing-version-error:
                  value:
                    code: MISSING_VERSION_ERROR
                    customizationId: <customizationid>
                offer-invalid-state-error:
                  value:
                    code: OFFER_INVALID_STATE_ERROR
                    offerId: <offerid>
                    state: <offersimplestatus>
                rendering-product-not-supported-error:
                  value:
                    code: RENDERING_PRODUCT_NOT_SUPPORTED_ERROR
                    productId: <string>
                untrusted-asset-source-error:
                  value:
                    code: UNTRUSTED_ASSET_SOURCE_ERROR
                    uri: <uri>
                variant-missing-size-error:
                  value:
                    code: VARIANT_MISSING_SIZE_ERROR
        "404":
          description: "Possible errors: `MEDIA_FILE_DO_NOT_EXISTS`,
            `OFFER_BY_CUSTOMIZATION_ID_AND_SHOP_ID_NOT_FOUND`,
            `OFFER_BY_CUSTOMIZATION_ID_NOT_FOUND_ERROR`,
            `OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR`,
            `PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND`,
            `RENDERING_NOT_SCHEDULED_ERROR`,
            `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                media-file-do-not-exists:
                  value:
                    code: MEDIA_FILE_DO_NOT_EXISTS
                    uri: <uri>
                offer-by-customization-id-and-shop-id-not-found:
                  value:
                    code: OFFER_BY_CUSTOMIZATION_ID_AND_SHOP_ID_NOT_FOUND
                    customizationId: <customizationid>
                    shopId: <shopid>
                offer-by-customization-id-not-found-error:
                  value:
                    code: OFFER_BY_CUSTOMIZATION_ID_NOT_FOUND_ERROR
                    customizationId: <customizationid>
                offer-not-found-by-shop-id-and-id-error:
                  value:
                    code: OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR
                    shopId: <shopid>
                    offerId: <offerid>
                product-catalog-product-id-not-found:
                  value:
                    code: PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND
                    id: <productid>
                rendering-not-scheduled-error:
                  value:
                    code: RENDERING_NOT_SCHEDULED_ERROR
                    customizationId: <string>
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "406":
          description: "Possible errors: `PRICING_CALCULATION_NOT_SUPPORTED`"
          content:
            application/json:
              examples:
                pricing-calculation-not-supported:
                  value:
                    code: PRICING_CALCULATION_NOT_SUPPORTED
                    customizationType: <customizationversiontype>
        "409":
          description: "Possible errors: `SQL_CONSTRAINTS_ERROR`"
          content:
            application/json:
              examples:
                sql-constraints-error:
                  value:
                    code: SQL_CONSTRAINTS_ERROR
                    table: <string?>
                    constraint: <string?>
                    msg: <string?>
        "429":
          description: >-
            Rate limited: 5 requests / minute per shop (effective limit).


            All applicable limits:

            - `customization-unauth-rate-limiter` — 50 requests / 10 seconds per
            client IP

            - `open-api-heavy-rate-limiter` — 5 requests / minute per shop

            - `open-api-rate-limiter` — 100 requests / 10 seconds per shop
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 5
        periodSeconds: 60
        dimension: shopId
        cacheName: open-api-heavy-rate-limiter
        applies:
          - cacheName: customization-unauth-rate-limiter
            filterOrder: 10
            capacity: 50
            periodSeconds: 10
            dimension: clientIp
          - cacheName: open-api-heavy-rate-limiter
            filterOrder: 10
            capacity: 5
            periodSeconds: 60
            dimension: shopId
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/collections:
    get:
      tags:
        - Collections
      summary: Get all collections
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all collections with pagination. The maximum page size is 100 -
        larger values are capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/collections/list-collections
      operationId: list-collections
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
        - name: search
          in: query
          required: false
          schema:
            type: string
          example: search_phrase
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.CollectionSlimV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    post:
      tags:
        - Collections
      summary: Create a new collection
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Creates a new collection with name, description, and optional product
        list
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/collections/create-collection
      operationId: create-collection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.CreateCollectionV1Requ\
                est"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionV1"
        "400":
          description: "Possible errors: `COLLECTION_DUPLICATE_SLUG_ERROR`,
            `COLLECTION_UNSUPPORTED_CREATE_OPERATION_ERROR`"
          content:
            application/json:
              examples:
                collection-duplicate-slug-error:
                  value:
                    code: COLLECTION_DUPLICATE_SLUG_ERROR
                    shopId: <shopid>
                    slug: <slug>
                collection-unsupported-create-operation-error:
                  value:
                    code: COLLECTION_UNSUPPORTED_CREATE_OPERATION_ERROR
                    slug: <slug>
        "404":
          description: "Possible errors: `COLLECTION_OFFERS_NOT_FOUND`"
          content:
            application/json:
              examples:
                collection-offers-not-found:
                  value:
                    code: COLLECTION_OFFERS_NOT_FOUND
                    shopId: <shopid>
                    offerIds: <list>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/webhook-events:
    get:
      tags:
        - Webhooks
      summary: Get webhook events
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Get webhook events with pagination and optional filtering by one or more
        webhook types (repeat or comma-separate the `type` param). The maximum
        page size is 100 - larger values are capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/webhooks/list-webhook-events
      operationId: list-webhook-events
      parameters:
        - name: type
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
              enum:
                - ORDER_PLACED
                - ORDER_UPDATED
                - GIFT_PURCHASE
                - PRODUCT_CREATED
                - PRODUCT_UPDATED
                - DONATION
                - SUBSCRIPTION_PURCHASED
                - SUBSCRIPTION_EXPIRED
                - SUBSCRIPTION_CHANGED
                - NEWSLETTER_SUBSCRIBED
                - THANK_YOU_SENT
                - GIFT_DRAW_STARTED
                - GIFT_DRAW_ENDED
                - PROMOTION_CREATED
                - PROMOTION_UPDATED
                - PROMOTION_STATUS_CHANGED
                - PLATFORM_APP_DISCONNECTED
                - MEMBERSHIP_POST_UPSERTED
                - MEMBERSHIP_SERIES_UPSERTED
                - MEMBERSHIP_SERIES_DELETED
                - MEMBERSHIP_TAG_CREATED
                - MEMBERSHIP_TAG_UPDATED
                - MEMBERSHIP_TAG_DELETED
                - MEMBERSHIP_TIER_UPSERTED
                - MEMBERSHIP_TIER_DELETED
                - COLLECTION_UPDATED
                - CART_ABANDONED_1H
                - CART_ABANDONED_24H
                - CART_ABANDONED_72H
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 50
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.WebhookEventV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - webhook_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/webhook-events/{webhookEventId}:
    get:
      tags:
        - Webhooks
      summary: Get a webhook event
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Get a single webhook event by ID
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/webhooks/get-webhook-event
      operationId: get-webhook-event
      parameters:
        - name: webhookEventId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.WebhookEventV1"
        "404":
          description: "Possible errors: `WEBHOOK_EVENT_NOT_FOUND`"
          content:
            application/json:
              examples:
                webhook-event-not-found:
                  value:
                    code: WEBHOOK_EVENT_NOT_FOUND
                    webhookEventId: <webhookeventid>
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - webhook_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/thank-yous/{thankYouId}:
    get:
      tags:
        - Thank yous
      summary: Get Thank You by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Get Thank You details
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/thank-yous/get-thank-you
      operationId: get-thank-you
      parameters:
        - name: thankYouId
          in: path
          required: true
          schema:
            type: string
          example: ty_EdJvIXu3SEiXe_QkPavHSA
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouV1"
        "404":
          description: "Possible errors: `KUDOS_CONTRIBUTION_DOES_NOT_EXIST`,
            `KUDOS_THANK_YOU_DOES_NOT_EXIST`"
          content:
            application/json:
              examples:
                kudos-contribution-does-not-exist:
                  value:
                    code: KUDOS_CONTRIBUTION_DOES_NOT_EXIST
                    kudosId: <kudosid>
                kudos-thank-you-does-not-exist:
                  value:
                    code: KUDOS_THANK_YOU_DOES_NOT_EXIST
                    thankYouId: <thankyouid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - thankyou_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/thank-you-contributions:
    get:
      tags:
        - Thank yous
      summary: Get contributions awaiting thank you
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns paginated list of orders, donations, and other contributions
        that can be thanked. The maximum page size is 100 - larger values are
        capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/thank-yous/list-contributions
      operationId: list-contributions
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 50
          example: 50
        - name: state
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
              enum:
                - WAITING
                - SKIPPED
                - SENT
                - CANCELLED
            uniqueItems: true
        - name: search
          in: query
          required: false
          schema:
            type: string
        - name: minValue
          in: query
          required: false
          schema:
            type: number
            format: double
        - name: containsMsg
          in: query
          required: false
          schema:
            type: boolean
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.KudosOrderV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - thankyou_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/streaming:
    get:
      tags:
        - Streaming
      summary: Get streaming status
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns streaming status for all services
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/streaming/get-streaming-status
      operationId: get-streaming-status
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.StreamingStatusV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/shops/current:
    get:
      tags:
        - Shop
      summary: Get current shop
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns the current shop
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/shop/get-current-shop
      operationId: get-current-shop
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.ShopV1"
        "404":
          description: "Possible errors: `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth: []
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/shops/current/contact-info:
    get:
      tags:
        - Shop
      summary: Get current shop contact info
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns the current shop contact info
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/shop/get-shop-contact-info
      operationId: get-shop-contact-info
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.ContactInfoV1"
        "404":
          description: "Possible errors: `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - shop_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/products/{productId}:
    get:
      tags:
        - Products (offers)
      summary: Get product (offer) by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns product by id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/products/get-product
      operationId: get-product
      parameters:
        - name: productId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferF\
                  ullV1"
        "404":
          description: "Possible errors: `OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR`,
            `OFFER_VARIANT_NOT_FOUND_ERROR`,
            `PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND`"
          content:
            application/json:
              examples:
                offer-not-found-by-shop-id-and-id-error:
                  value:
                    code: OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR
                    shopId: <shopid>
                    offerId: <offerid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
                product-catalog-product-id-not-found:
                  value:
                    code: PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND
                    id: <productid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
    delete:
      tags:
        - Products (offers)
      summary: Archive a product (offer)
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Soft-archives the product — sets it to `Archived`. Terminal at this
        surface: once archived, the product cannot be returned to
        `PUBLIC`/`HIDDEN` through the open-api (restoration stays admin-only).
        Idempotent: re-DELETE on an already-archived product also returns 204.
      operationId: archive-product
      parameters:
        - name: productId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      responses:
        "204":
          description: No Content
        "400":
          description: "Possible errors: `OFFER_INVALID_STATE_ERROR`"
          content:
            application/json:
              examples:
                offer-invalid-state-error:
                  value:
                    code: OFFER_INVALID_STATE_ERROR
                    offerId: <offerid>
                    state: <offersimplestatus>
        "404":
          description: "Possible errors: `OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR`,
            `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                offer-not-found-by-shop-id-and-id-error:
                  value:
                    code: OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR
                    shopId: <shopid>
                    offerId: <offerid>
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "409":
          description: "Possible errors: `SQL_CONSTRAINTS_ERROR`"
          content:
            application/json:
              examples:
                sql-constraints-error:
                  value:
                    code: SQL_CONSTRAINTS_ERROR
                    table: <string?>
                    constraint: <string?>
                    msg: <string?>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_write
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/products/{productId}/inventory:
    get:
      tags:
        - Products (offers)
      summary: Get product (offer) inventory by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns product (offer) inventory by id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/products/get-product-inventory
      operationId: get-product-inventory
      parameters:
        - name: productId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.StockV1"
        "404":
          description: "Possible errors: `OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR`"
          content:
            application/json:
              examples:
                offer-not-found-by-shop-id-and-id-error:
                  value:
                    code: OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR
                    shopId: <shopid>
                    offerId: <offerid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/product-templates/{productId}:
    get:
      tags:
        - Product Templates
      summary: Get product template details
      description: "

        \            Get detailed information about a specific product template.


        \            This endpoint is public and does not require
        authentication.

        \            Returns full product details including variants,
        customizable areas,

        \            size guide, and images.

        \        "
      operationId: get-product-template
      parameters:
        - name: productId
          in: path
          description: Product template ID
          required: true
          schema:
            type: string
          example: pro_k66ZW4fsRm6c2def3itltA
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplateV1"
        "404":
          description: "Possible errors: `GENERATOR_ID_NOT_FOUND`,
            `PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND`"
          content:
            application/json:
              examples:
                generator-id-not-found:
                  value:
                    code: GENERATOR_ID_NOT_FOUND
                    id: <generatorid>
                product-catalog-product-id-not-found:
                  value:
                    code: PRODUCT_CATALOG_PRODUCT_ID_NOT_FOUND
                    id: <productid>
  /open-api/v1.0/product-templates/page/{page}:
    get:
      tags:
        - Product Templates
      summary: List product templates by page
      description: List available product templates with pagination. This endpoint is
        public and does not require authentication.
      operationId: list-product-templates-paged
      parameters:
        - name: page
          in: path
          description: Page number (1-indexed)
          required: true
          schema:
            type: integer
            format: int32
          example: 2
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplateListV1"
  /open-api/v1.0/order:
    get:
      tags:
        - Orders
      summary: Get all orders
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all orders with pagination. The maximum page size is 100 -
        larger values are capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/orders/list-orders
      operationId: list-orders
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
        - name: email
          in: query
          required: false
          schema:
            type: string
          example: supporter@fourthwall.com
        - name: createdAt[gt]
          in: query
          required: false
          schema:
            type: string
            format: date-time
          example: 2020-08-13T09:05:36.939Z
        - name: createdAt[lt]
          in: query
          required: false
          schema:
            type: string
            format: date-time
          example: 2020-08-13T09:05:36.939Z
        - name: updatedAt[gt]
          in: query
          required: false
          schema:
            type: string
            format: date-time
          example: 2020-08-13T09:05:36.939Z
        - name: updatedAt[lt]
          in: query
          required: false
          schema:
            type: string
            format: date-time
          example: 2020-08-13T09:05:36.939Z
        - name: status
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
              enum:
                - CONFIRMED
                - PARTIALLY_IN_PRODUCTION
                - IN_PRODUCTION
                - PARTIALLY_SHIPPED
                - SHIPPED
                - PARTIALLY_DELIVERED
                - DELIVERED
                - CANCELLED
                - COMPLETED
            uniqueItems: true
          example: CONFIRMED
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.OrderV1"
        "400":
          description: "Possible errors: `WEBHOOK_NOT_SUPPORTED_ORDER_STATUS`,
            `WEBHOOK_NOT_SUPPORTED_ORDER_TYPE`"
          content:
            application/json:
              examples:
                webhook-not-supported-order-status:
                  value:
                    code: WEBHOOK_NOT_SUPPORTED_ORDER_STATUS
                    orderStatus: <string>
                webhook-not-supported-order-type:
                  value:
                    code: WEBHOOK_NOT_SUPPORTED_ORDER_TYPE
                    orderType: <string>
        "404":
          description: "Possible errors: `OFFER_VARIANT_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - order_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/order/{orderId}:
    get:
      tags:
        - Orders
      summary: Get order by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns order by id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/orders/get-order
      operationId: get-order
      parameters:
        - name: orderId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1"
        "400":
          description: "Possible errors: `WEBHOOK_NOT_SUPPORTED_ORDER_STATUS`,
            `WEBHOOK_NOT_SUPPORTED_ORDER_TYPE`"
          content:
            application/json:
              examples:
                webhook-not-supported-order-status:
                  value:
                    code: WEBHOOK_NOT_SUPPORTED_ORDER_STATUS
                    orderStatus: <string>
                webhook-not-supported-order-type:
                  value:
                    code: WEBHOOK_NOT_SUPPORTED_ORDER_TYPE
                    orderType: <string>
        "404":
          description: "Possible errors: `APPROVAL_SHEET_NOT_FOUND`,
            `CHECKOUT_NOT_FOUND_ERROR`, `OFFER_VARIANT_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                approval-sheet-not-found:
                  value:
                    code: APPROVAL_SHEET_NOT_FOUND
                    id: <approvalsheetid>
                checkout-not-found-error:
                  value:
                    code: CHECKOUT_NOT_FOUND_ERROR
                    checkoutId: <checkoutid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - order_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/order/by-friendly-id/{friendlyId}:
    get:
      tags:
        - Orders
      summary: Get order by friendly id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns order by friendly id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/orders/get-order-by-friendly-id
      operationId: get-order-by-friendly-id
      parameters:
        - name: friendlyId
          in: path
          required: true
          schema:
            type: string
          example: D3XZFWPP
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1"
        "400":
          description: "Possible errors: `WEBHOOK_NOT_SUPPORTED_ORDER_STATUS`,
            `WEBHOOK_NOT_SUPPORTED_ORDER_TYPE`"
          content:
            application/json:
              examples:
                webhook-not-supported-order-status:
                  value:
                    code: WEBHOOK_NOT_SUPPORTED_ORDER_STATUS
                    orderStatus: <string>
                webhook-not-supported-order-type:
                  value:
                    code: WEBHOOK_NOT_SUPPORTED_ORDER_TYPE
                    orderType: <string>
        "404":
          description: "Possible errors: `APPROVAL_SHEET_NOT_FOUND`,
            `CHECKOUT_NOT_FOUND_ERROR`, `OFFER_VARIANT_NOT_FOUND_ERROR`,
            `ORDER_FRIENDLY_ID_NOT_FOUND`"
          content:
            application/json:
              examples:
                approval-sheet-not-found:
                  value:
                    code: APPROVAL_SHEET_NOT_FOUND
                    id: <approvalsheetid>
                checkout-not-found-error:
                  value:
                    code: CHECKOUT_NOT_FOUND_ERROR
                    checkoutId: <checkoutid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
                order-friendly-id-not-found:
                  value:
                    code: ORDER_FRIENDLY_ID_NOT_FOUND
                    id: <orderfriendlyid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - order_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/memberships/tiers:
    get:
      tags:
        - "BETA: Memberships"
      summary: List membership tiers
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Lists all tiers for the current shop
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/memberships/list-tiers
      operationId: list-tiers
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipTierV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - memberships_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/memberships/members:
    get:
      tags:
        - "BETA: Memberships"
      summary: List members
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Lists all members for the current shop. The maximum page size is 100 -
        larger values are capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/memberships/list-members
      operationId: list-members
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.MembershipSupporterV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - memberships_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/memberships/members/{id}:
    get:
      tags:
        - "BETA: Memberships"
      summary: Get member
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Gets a member by id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/memberships/get-member
      operationId: get-member
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          example: 123456
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1"
        "404":
          description: "Possible errors: `MEMBERSHIP_SUPPORTER_NOT_FOUND_BY_ID_ERROR`"
          content:
            application/json:
              examples:
                membership-supporter-not-found-by-id-error:
                  value:
                    code: MEMBERSHIP_SUPPORTER_NOT_FOUND_BY_ID_ERROR
                    supporterId: <supporterid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - memberships_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/mailing-list-entries:
    get:
      tags:
        - Mailing Lists
      summary: Get all mailing list entries
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all mailing list entries. The maximum page size is 100 - larger
        values are capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/mailing-lists/list-entries
      operationId: list-entries
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.MailingListEntryV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - basicAuth: []
        - oauth:
            - shop_read
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/giveaway-links/packages:
    get:
      tags:
        - Giveaway links
      summary: Get all giveaway packages
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all packages with giveaway links
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/giveaway-links/list-packages
      operationId: list-packages
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayPackagesV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/giveaway-links/packages/{packageId}:
    get:
      tags:
        - Giveaway links
      summary: Get giveaway links
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all giveaway links for packageId
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/giveaway-links/get-package
      operationId: get-package
      parameters:
        - name: packageId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1"
        "404":
          description: "Possible errors: `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/gifting/draw/{id}:
    get:
      tags:
        - Gifting
      summary: Get draw
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Get draw details
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/gifting/get-draw
      operationId: get-draw
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1"
        "404":
          description: "Possible errors: `GIVEAWAY_NOT_FOUND_FOR_DRAW_ID`,
            `OFFER_NOT_FOUND_ERROR`, `OFFER_VARIANT_NOT_FOUND_ERROR`,
            `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                giveaway-not-found-for-draw-id:
                  value:
                    code: GIVEAWAY_NOT_FOUND_FOR_DRAW_ID
                    shopId: <shopid>
                    drawId: <giveawaydrawid>
                offer-not-found-error:
                  value:
                    code: OFFER_NOT_FOUND_ERROR
                    offerId: <offerid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - giveaway_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/gift-purchase/{giftPurchaseId}:
    get:
      tags:
        - Twitch gift purchases
      summary: Get gift purchase by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns gift purchase details by id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/gift-purchases/get-gift-purchase
      operationId: get-gift-purchase
      parameters:
        - name: giftPurchaseId
          in: path
          required: true
          schema:
            type: string
          example: giv_EdJvIXu3SEiXe_QkPavHSA
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1"
        "404":
          description: "Possible errors: `GIVEAWAY_NOT_FOUND`, `OFFER_NOT_FOUND_ERROR`,
            `OFFER_VARIANT_NOT_FOUND_ERROR`,
            `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`"
          content:
            application/json:
              examples:
                giveaway-not-found:
                  value:
                    code: GIVEAWAY_NOT_FOUND
                    shopId: <shopid?>
                    giveawayId: <giveawayid>
                    giveawayFriendlyId: <giveawayfriendlyid?>
                    email: <string?>
                offer-not-found-error:
                  value:
                    code: OFFER_NOT_FOUND_ERROR
                    offerId: <offerid>
                offer-variant-not-found-error:
                  value:
                    code: OFFER_VARIANT_NOT_FOUND_ERROR
                    offerVariantId: <offervariantid>
                shop-team-member-shop-not-found-error:
                  value:
                    code: SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR
                    shopId: <shopid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/donations:
    get:
      tags:
        - Donations
      summary: Get all donations
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns all donations with pagination. The maximum page size is 100 -
        larger values are capped at 100.
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/donations/list-donations
      operationId: list-donations
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: Number of elements per page. The maximum page size is 100 - larger
            values are capped at 100.
          required: false
          schema:
            type: integer
            format: int32
            default: 20
          example: 5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
                  .fourthwall.openapi.model.DonationV1"
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - donation_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/donations/{donationId}:
    get:
      tags:
        - Donations
      summary: Get donation by id
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns donation by id
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/donations/get-donation
      operationId: get-donation
      parameters:
        - name: donationId
          in: path
          required: true
          schema:
            type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.DonationV1"
        "404":
          description: "Possible errors: `DONATION_NOT_FOUND`"
          content:
            application/json:
              examples:
                donation-not-found:
                  value:
                    code: DONATION_NOT_FOUND
                    id: <donationid>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - donation_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
  /open-api/v1.0/collections/{collectionIdOrSlug}:
    get:
      tags:
        - Collections
      summary: Get collection by ID or slug
      description: >-
        *Rate limit: 100 requests / 10 seconds per shop. See [Rate
        limiting](/guides/rate-limiting).*


        Returns a collection by its ID or slug
      externalDocs:
        url: https://docs.fourthwall.com/api-reference/platform/collections/get-collection
      operationId: get-collection
      parameters:
        - name: collectionIdOrSlug
          in: path
          required: true
          schema:
            type: string
          example: my-collection
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionV1"
        "404":
          description: "Possible errors: `COLLECTION_NOT_FOUND_BY_ID_AND_SHOP_ID_ERROR`,
            `COLLECTION_NOT_FOUND_BY_SHOP_ID_AND_SHOP_ERROR`"
          content:
            application/json:
              examples:
                collection-not-found-by-id-and-shop-id-error:
                  value:
                    code: COLLECTION_NOT_FOUND_BY_ID_AND_SHOP_ID_ERROR
                    shopId: <shopid>
                    id: <collectionid>
                collection-not-found-by-shop-id-and-shop-error:
                  value:
                    code: COLLECTION_NOT_FOUND_BY_SHOP_ID_AND_SHOP_ERROR
                    shopId: <shopid>
                    slug: <slug>
        "429":
          description: "Rate limited: 100 requests / 10 seconds per shop."
          content:
            application/json:
              examples:
                too-many-requests:
                  value:
                    code: OPEN_API_TOO_MANY_REQUESTS
                    title: Too many requests
                    status: 429
      security:
        - oauth:
            - offer_read
        - basicAuth: []
      x-rate-limit:
        capacity: 100
        periodSeconds: 10
        dimension: shopId
        cacheName: open-api-rate-limiter
        applies:
          - cacheName: open-api-rate-limiter
            filterOrder: 10
            capacity: 100
            periodSeconds: 10
            dimension: shopId
components:
  schemas:
    com.fourthwall.app.openapi.endpoint.OpenApiWebhookConfigurationEndpoint.WebhookConfigurationUpdateRequest:
      type: object
      properties:
        url:
          type: string
        allowedTypes:
          type: array
          items:
            type: string
            enum:
              - ORDER_PLACED
              - ORDER_UPDATED
              - GIFT_PURCHASE
              - PRODUCT_CREATED
              - PRODUCT_UPDATED
              - DONATION
              - SUBSCRIPTION_PURCHASED
              - SUBSCRIPTION_EXPIRED
              - SUBSCRIPTION_CHANGED
              - NEWSLETTER_SUBSCRIBED
              - THANK_YOU_SENT
              - GIFT_DRAW_STARTED
              - GIFT_DRAW_ENDED
              - PROMOTION_CREATED
              - PROMOTION_UPDATED
              - PROMOTION_STATUS_CHANGED
              - PLATFORM_APP_DISCONNECTED
              - MEMBERSHIP_POST_UPSERTED
              - MEMBERSHIP_SERIES_UPSERTED
              - MEMBERSHIP_SERIES_DELETED
              - MEMBERSHIP_TAG_CREATED
              - MEMBERSHIP_TAG_UPDATED
              - MEMBERSHIP_TAG_DELETED
              - MEMBERSHIP_TIER_UPSERTED
              - MEMBERSHIP_TIER_DELETED
              - COLLECTION_UPDATED
              - CART_ABANDONED_1H
              - CART_ABANDONED_24H
              - CART_ABANDONED_72H
      required:
        - allowedTypes
        - url
      title: Webhook Configuration Update Request
    com.fourthwall.openapi.model.WebhookConfigurationV1:
      type: object
      properties:
        id:
          type: string
        url:
          type: string
        allowedTypes:
          type: array
          items:
            type: string
            enum:
              - ORDER_PLACED
              - ORDER_UPDATED
              - GIFT_PURCHASE
              - PRODUCT_CREATED
              - PRODUCT_UPDATED
              - DONATION
              - SUBSCRIPTION_PURCHASED
              - SUBSCRIPTION_EXPIRED
              - SUBSCRIPTION_CHANGED
              - NEWSLETTER_SUBSCRIBED
              - THANK_YOU_SENT
              - GIFT_DRAW_STARTED
              - GIFT_DRAW_ENDED
              - PROMOTION_CREATED
              - PROMOTION_UPDATED
              - PROMOTION_STATUS_CHANGED
              - PLATFORM_APP_DISCONNECTED
              - MEMBERSHIP_POST_UPSERTED
              - MEMBERSHIP_SERIES_UPSERTED
              - MEMBERSHIP_SERIES_DELETED
              - MEMBERSHIP_TAG_CREATED
              - MEMBERSHIP_TAG_UPDATED
              - MEMBERSHIP_TAG_DELETED
              - MEMBERSHIP_TIER_UPSERTED
              - MEMBERSHIP_TIER_DELETED
              - COLLECTION_UPDATED
              - CART_ABANDONED_1H
              - CART_ABANDONED_24H
              - CART_ABANDONED_72H
        apiVersion:
          type: string
          enum:
            - V1
      required:
        - allowedTypes
        - apiVersion
        - id
        - url
      title: Webhook Configuration
    com.fourthwall.app.openapi.endpoint.StreamingStartedRequest:
      type: object
      properties:
        services:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.StreamingStarte\
                  dRequest.Service.Twitch"
      required:
        - services
      title: Streaming Started Request
    com.fourthwall.app.openapi.endpoint.StreamingStartedRequest.Service:
      discriminator:
        propertyName: type
      properties:
        type:
          type: string
      required:
        - type
      title: Service
    com.fourthwall.app.openapi.endpoint.StreamingStartedRequest.Service.Twitch:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.StreamingStarte\
            dRequest.Service"
        - type: object
          properties:
            broadcasterId:
              type: string
            broadcasterLogin:
              type: string
            thumbnailUrl:
              type: string
      required:
        - broadcasterId
        - broadcasterLogin
      title: Twitch
    com.fourthwall.openapi.model.StreamingStatusV1:
      type: object
      properties:
        shopId:
          type: string
        services:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.StreamingStatusV1.Serv\
                  ice.Twitch"
      required:
        - services
        - shopId
      title: Streaming Status
    com.fourthwall.openapi.model.StreamingStatusV1.Service:
      discriminator:
        propertyName: type
        mapping:
          TWITCH: "#/components/schemas/com.fourthwall.openapi.model.StreamingStatusV1.Se\
            rvice.Twitch"
      properties:
        type:
          type: string
      required:
        - type
      title: Service
    com.fourthwall.openapi.model.StreamingStatusV1.Service.Twitch:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.StreamingStatusV1.Serv\
            ice"
        - type: object
          properties:
            status:
              type: string
              enum:
                - ONLINE
                - OFFLINE
            broadcasterId:
              type: string
            broadcasterLogin:
              type: string
            thumbnailUrl:
              type: string
        - type: object
          properties:
            type:
              type: string
              const: TWITCH
      required:
        - status
      title: Twitch
    com.fourthwall.app.openapi.endpoint.StreamingEndedRequest:
      type: object
      properties:
        services:
          type: array
          items:
            type: string
            enum:
              - TWITCH
      required:
        - services
      title: Streaming Ended Request
    com.fourthwall.app.openapi.endpoint.OpenApiShopEndpoint.PublicTokenResponse:
      type: object
      properties:
        token:
          type: string
      required:
        - token
      title: Public Token Response
    Money:
      type: object
      properties:
        value:
          type: number
          example: 10
          minimum: 0
        currency:
          type: string
          example: USD
      required:
        - currency
        - value
      title: Money
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionLimits:
      type: object
      properties:
        maximumUse:
          type: integer
          format: int32
        oneUsePerCustomer:
          type: boolean
      required:
        - oneUsePerCustomer
      title: Open Api Promotion Limits
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionRequirements.Shop:
      type: object
      properties:
        minimumOrderValue:
          $ref: "#/components/schemas/Money"
      title: Shop
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiUpdatePromotionAppliesTo:
      title: Open Api Update Promotion Applies To
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiUpdatePromotionAppliesTo.EntireOrder:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiUpdatePromotionAppliesTo"
        - type: object
          properties:
            type:
              type: string
      required:
        - type
      title: Entire Order
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiUpdatePromotionAppliesTo.SelectedProducts:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiUpdatePromotionAppliesTo"
        - type: object
          properties:
            productIds:
              type: array
              items:
                type: string
                format: uuid
            oncePerOrder:
              type: boolean
      required:
        - productIds
      title: Selected Products
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiUpdatePromotionRequest:
      type: object
      properties:
        limits:
          $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionLimits"
        requirements:
          $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionRequirements.Shop"
        appliesTo:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiUpdatePromotionAppliesTo.EntireOrder"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiUpdatePromotionAppliesTo.SelectedProducts"
        status:
          type: string
          enum:
            - LIVE
            - ENDED
      title: Open Api Update Promotion Request
    com.fourthwall.openapi.model.promotions.AutoApplyingShopPromotionV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
        - type: object
          properties:
            id:
              type: string
            title:
              type: string
            code:
              type: string
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FixedAmount"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeProducts"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeShipping"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.Percentage"
            status:
              type: string
              enum:
                - Live
                - Ended
                - Archived
                - AllUsed
            requirements:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionRe\
                quirementsV1.Shop"
            usageCount:
              type: integer
              format: int32
            limits:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionLi\
                mitsV1"
            appliesTo:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.EntireOrder"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.EntireOrderWithExcludedProducts"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.SelectedProducts"
            type:
              type: string
              const: SHOP_AUTO_APPLYING
      required:
        - appliesTo
        - code
        - discount
        - id
        - limits
        - requirements
        - status
        - title
        - type
        - usageCount
      title: Auto Applying Shop Promotion
    com.fourthwall.openapi.model.promotions.MultiMembershipsPromotionV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
        - type: object
          properties:
            id:
              type: string
            title:
              type: string
            codes:
              type: array
              items:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiPromoS\
                  ubCodeV1"
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsDiscountTypeV1.Percentage"
            status:
              type: string
              enum:
                - Live
                - Ended
                - Archived
                - AllUsed
            requirements:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionRe\
                quirementsV1.Memberships"
            usageCount:
              type: integer
              format: int32
            subscriptionType:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsSubscriptionTypeAppliesToV1.AllMembers"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsSubscriptionTypeAppliesToV1.AnnualMembersOnly"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsSubscriptionTypeAppliesToV1.MonthlyMembersOnly"
            tiers:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsTiersAppliesToV1.AllTiers"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsTiersAppliesToV1.SelectedTiers"
            type:
              type: string
              const: MEMBERSHIPS_MULTI
      required:
        - codes
        - discount
        - id
        - requirements
        - status
        - subscriptionType
        - tiers
        - title
        - type
        - usageCount
      title: Multi Memberships Promotion
    com.fourthwall.openapi.model.promotions.MultiPromoSubCodeV1:
      type: object
      properties:
        id:
          type: string
        code:
          type: string
        usageCount:
          type: integer
          format: int32
        status:
          type: string
          enum:
            - Live
            - Ended
            - Archived
            - AllUsed
      required:
        - code
        - id
        - status
        - usageCount
      title: Multi Promo Sub Code
    com.fourthwall.openapi.model.promotions.MultiShopPromotionV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
        - type: object
          properties:
            id:
              type: string
            title:
              type: string
            codes:
              type: array
              items:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiPromoS\
                  ubCodeV1"
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FixedAmount"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeProducts"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeShipping"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.Percentage"
            status:
              type: string
              enum:
                - Live
                - Ended
                - Archived
                - AllUsed
            requirements:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionRe\
                quirementsV1.Shop"
            limits:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionLi\
                mitsV1"
            usageCount:
              type: integer
              format: int32
            appliesTo:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.EntireOrder"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.EntireOrderWithExcludedProducts"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.SelectedProducts"
            type:
              type: string
              const: SHOP_MULTI
      required:
        - appliesTo
        - codes
        - discount
        - id
        - limits
        - requirements
        - status
        - title
        - type
        - usageCount
      title: Multi Shop Promotion
    com.fourthwall.openapi.model.promotions.PromotionLimitsV1:
      type: object
      properties:
        maximumUsesNumber:
          type: integer
          format: int32
        oneUsePerCustomer:
          type: boolean
      title: Promotion Limits
    com.fourthwall.openapi.model.promotions.PromotionMembershipsDiscountTypeV1:
      discriminator:
        propertyName: type
        mapping:
          MEMBERSHIPS_PERCENTAGE: "#/components/schemas/com.fourthwall.openapi.model.prom\
            otions.PromotionMembershipsDiscountTypeV1.Percentage"
      properties:
        type:
          type: string
      required:
        - type
      title: Promotion Memberships Discount Type
    com.fourthwall.openapi.model.promotions.PromotionMembershipsDiscountTypeV1.Percentage:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
            mbershipsDiscountTypeV1"
        - type: object
          properties:
            percentage:
              type: number
        - type: object
          properties:
            type:
              type: string
              const: MEMBERSHIPS_PERCENTAGE
      required:
        - percentage
      title: Percentage
    com.fourthwall.openapi.model.promotions.PromotionMembershipsSubscriptionTypeAppliesToV1:
      discriminator:
        propertyName: type
        mapping:
          ALL: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMem\
            bershipsSubscriptionTypeAppliesToV1.AllMembers"
          MONTHLY: "#/components/schemas/com.fourthwall.openapi.model.promotions.Promotio\
            nMembershipsSubscriptionTypeAppliesToV1.MonthlyMembersOnly"
          ANNUAL: "#/components/schemas/com.fourthwall.openapi.model.promotions.Promotion\
            MembershipsSubscriptionTypeAppliesToV1.AnnualMembersOnly"
      properties:
        type:
          type: string
      required:
        - type
      title: Promotion Memberships Subscription Type Applies To
    com.fourthwall.openapi.model.promotions.PromotionMembershipsSubscriptionTypeAppliesToV1.AllMembers:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
            mbershipsSubscriptionTypeAppliesToV1"
        - type: object
          properties:
            type:
              type: string
              const: ALL
      title: All Members
    com.fourthwall.openapi.model.promotions.PromotionMembershipsSubscriptionTypeAppliesToV1.AnnualMembersOnly:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
            mbershipsSubscriptionTypeAppliesToV1"
        - type: object
          properties:
            type:
              type: string
              const: ANNUAL
      title: Annual Members Only
    com.fourthwall.openapi.model.promotions.PromotionMembershipsSubscriptionTypeAppliesToV1.MonthlyMembersOnly:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
            mbershipsSubscriptionTypeAppliesToV1"
        - type: object
          properties:
            type:
              type: string
              const: MONTHLY
      title: Monthly Members Only
    com.fourthwall.openapi.model.promotions.PromotionMembershipsTiersAppliesToV1:
      discriminator:
        propertyName: type
        mapping:
          ALL: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMem\
            bershipsTiersAppliesToV1.AllTiers"
          SELECTED: "#/components/schemas/com.fourthwall.openapi.model.promotions.Promoti\
            onMembershipsTiersAppliesToV1.SelectedTiers"
      properties:
        type:
          type: string
      required:
        - type
      title: Promotion Memberships Tiers Applies To
    com.fourthwall.openapi.model.promotions.PromotionMembershipsTiersAppliesToV1.AllTiers:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
            mbershipsTiersAppliesToV1"
        - type: object
          properties:
            type:
              type: string
              const: ALL
      title: All Tiers
    com.fourthwall.openapi.model.promotions.PromotionMembershipsTiersAppliesToV1.SelectedTiers:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
            mbershipsTiersAppliesToV1"
        - type: object
          properties:
            tiersIds:
              type: array
              items:
                type: string
        - type: object
          properties:
            type:
              type: string
              const: SELECTED
      required:
        - tiersIds
      title: Selected Tiers
    com.fourthwall.openapi.model.promotions.PromotionRequirementsV1.Memberships:
      type: object
      properties:
        newMembersOnly:
          type: boolean
      required:
        - newMembersOnly
      title: Memberships
    com.fourthwall.openapi.model.promotions.PromotionRequirementsV1.Shop:
      type: object
      properties:
        minimumOrderValue:
          $ref: "#/components/schemas/Money"
      title: Shop
    com.fourthwall.openapi.model.promotions.PromotionShopAppliesToV1:
      discriminator:
        propertyName: type
        mapping:
          ENTIRE_ORDER: "#/components/schemas/com.fourthwall.openapi.model.promotions.Pro\
            motionShopAppliesToV1.EntireOrder"
          SELECTED_PRODUCTS: "#/components/schemas/com.fourthwall.openapi.model.promotion\
            s.PromotionShopAppliesToV1.SelectedProducts"
          ENTIRE_ORDER_WITH_EXCLUDED_PRODUCTS: "#/components/schemas/com.fourthwall.opena\
            pi.model.promotions.PromotionShopAppliesToV1.EntireOrderWithExclude\
            dProducts"
      properties:
        type:
          type: string
      required:
        - type
      title: Promotion Shop Applies To
    com.fourthwall.openapi.model.promotions.PromotionShopAppliesToV1.EntireOrder:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opAppliesToV1"
        - type: object
          properties:
            type:
              type: string
              const: ENTIRE_ORDER
      title: Entire Order
    com.fourthwall.openapi.model.promotions.PromotionShopAppliesToV1.EntireOrderWithExcludedProducts:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opAppliesToV1"
        - type: object
          properties:
            excludedProducts:
              type: array
              items:
                type: string
                format: uuid
        - type: object
          properties:
            type:
              type: string
              const: ENTIRE_ORDER_WITH_EXCLUDED_PRODUCTS
      required:
        - excludedProducts
      title: Entire Order With Excluded Products
    com.fourthwall.openapi.model.promotions.PromotionShopAppliesToV1.SelectedProducts:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opAppliesToV1"
        - type: object
          properties:
            products:
              type: array
              items:
                type: string
                format: uuid
            oncePerOrder:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: SELECTED_PRODUCTS
      required:
        - oncePerOrder
        - products
      title: Selected Products
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1:
      discriminator:
        propertyName: type
        mapping:
          PERCENTAGE: "#/components/schemas/com.fourthwall.openapi.model.promotions.Promo\
            tionShopDiscountTypeV1.Percentage"
          FLAT_RATE: "#/components/schemas/com.fourthwall.openapi.model.promotions.Promot\
            ionShopDiscountTypeV1.FixedAmount"
          FREE_SHIPPING: "#/components/schemas/com.fourthwall.openapi.model.promotions.Pr\
            omotionShopDiscountTypeV1.FreeShipping"
          FREE_PRODUCTS: "#/components/schemas/com.fourthwall.openapi.model.promotions.Pr\
            omotionShopDiscountTypeV1.FreeProducts"
      properties:
        type:
          type: string
      required:
        - type
      title: Promotion Shop Discount Type
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FixedAmount:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opDiscountTypeV1"
        - type: object
          properties:
            money:
              $ref: "#/components/schemas/Money"
            freeShipping:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: FLAT_RATE
      required:
        - freeShipping
        - money
      title: Fixed Amount
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FreeProducts:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opDiscountTypeV1"
        - type: object
          properties:
            freeProductsType:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeProducts.Type.AutoAdded"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeProducts.Type.ManuallyAdded"
            freeShipping:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: FREE_PRODUCTS
      required:
        - freeProductsType
        - freeShipping
      title: Free Products
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FreeProducts.AutoAddedFreeProduct:
      type: object
      properties:
        variantId:
          type: string
        quantity:
          type: integer
          format: int32
      required:
        - quantity
        - variantId
      title: Auto Added Free Product
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FreeProducts.ManuallyAddedFreeProduct:
      type: object
      properties:
        availableVariantIds:
          type: array
          items:
            type: string
            format: uuid
        quantity:
          type: integer
          format: int32
      required:
        - availableVariantIds
        - quantity
      title: Manually Added Free Product
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FreeProducts.Type:
      discriminator:
        propertyName: type
        mapping:
          AUTO_ADDED: "#/components/schemas/com.fourthwall.openapi.model.promotions.Promo\
            tionShopDiscountTypeV1.FreeProducts.Type.AutoAdded"
          MANUALLY_ADDED: "#/components/schemas/com.fourthwall.openapi.model.promotions.P\
            romotionShopDiscountTypeV1.FreeProducts.Type.ManuallyAdded"
      properties:
        type:
          type: string
      required:
        - type
      title: Type
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FreeProducts.Type.AutoAdded:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opDiscountTypeV1.FreeProducts.Type"
        - type: object
          properties:
            products:
              type: array
              items:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                  opDiscountTypeV1.FreeProducts.AutoAddedFreeProduct"
        - type: object
          properties:
            type:
              type: string
              const: AUTO_ADDED
      required:
        - products
      title: Auto Added
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FreeProducts.Type.ManuallyAdded:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opDiscountTypeV1.FreeProducts.Type"
        - type: object
          properties:
            products:
              type: array
              items:
                $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                  opDiscountTypeV1.FreeProducts.ManuallyAddedFreeProduct"
        - type: object
          properties:
            type:
              type: string
              const: MANUALLY_ADDED
      required:
        - products
      title: Manually Added
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.FreeShipping:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opDiscountTypeV1"
        - type: object
          properties:
            lowestOnly:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: FREE_SHIPPING
      required:
        - lowestOnly
      title: Free Shipping
    com.fourthwall.openapi.model.promotions.PromotionShopDiscountTypeV1.Percentage:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
            opDiscountTypeV1"
        - type: object
          properties:
            percentage:
              type: number
            shippingOption:
              type: string
              enum:
                - Included
                - Excluded
                - Free
                - FreeLowestOnly
        - type: object
          properties:
            type:
              type: string
              const: PERCENTAGE
      required:
        - percentage
      title: Percentage
    com.fourthwall.openapi.model.promotions.PromotionV1:
      discriminator:
        propertyName: type
        mapping:
          SHOP_SINGLE: "#/components/schemas/com.fourthwall.openapi.model.promotions.Sing\
            leShopPromotionV1"
          SHOP_MULTI: "#/components/schemas/com.fourthwall.openapi.model.promotions.Multi\
            ShopPromotionV1"
          SHOP_AUTO_APPLYING: "#/components/schemas/com.fourthwall.openapi.model.promotio\
            ns.AutoApplyingShopPromotionV1"
          MEMBERSHIPS_SINGLE: "#/components/schemas/com.fourthwall.openapi.model.promotio\
            ns.SingleMembershipsPromotionV1"
          MEMBERSHIPS_MULTI: "#/components/schemas/com.fourthwall.openapi.model.promotion\
            s.MultiMembershipsPromotionV1"
      properties:
        type:
          type: string
      required:
        - type
      title: Promotion
    com.fourthwall.openapi.model.promotions.SingleMembershipsPromotionV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
        - type: object
          properties:
            id:
              type: string
            code:
              type: string
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsDiscountTypeV1.Percentage"
            status:
              type: string
              enum:
                - Live
                - Ended
                - Archived
                - AllUsed
            requirements:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionRe\
                quirementsV1.Memberships"
            usageCount:
              type: integer
              format: int32
            subscriptionType:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsSubscriptionTypeAppliesToV1.AllMembers"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsSubscriptionTypeAppliesToV1.AnnualMembersOnly"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsSubscriptionTypeAppliesToV1.MonthlyMembersOnly"
            tiers:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsTiersAppliesToV1.AllTiers"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionMe\
                    mbershipsTiersAppliesToV1.SelectedTiers"
            type:
              type: string
              const: MEMBERSHIPS_SINGLE
      required:
        - code
        - discount
        - id
        - requirements
        - status
        - subscriptionType
        - tiers
        - type
        - usageCount
      title: Single Memberships Promotion
    com.fourthwall.openapi.model.promotions.SingleShopPromotionV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
        - type: object
          properties:
            id:
              type: string
            code:
              type: string
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FixedAmount"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeProducts"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.FreeShipping"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opDiscountTypeV1.Percentage"
            status:
              type: string
              enum:
                - Live
                - Ended
                - Archived
                - AllUsed
            requirements:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionRe\
                quirementsV1.Shop"
            usageCount:
              type: integer
              format: int32
            limits:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionLi\
                mitsV1"
            appliesTo:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.EntireOrder"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.EntireOrderWithExcludedProducts"
                - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionSh\
                    opAppliesToV1.SelectedProducts"
            type:
              type: string
              const: SHOP_SINGLE
      required:
        - appliesTo
        - code
        - discount
        - id
        - limits
        - requirements
        - status
        - type
        - usageCount
      title: Single Shop Promotion
    UpdateProductStateV1Request:
      type: object
      description: Request to transition a product (offer) lifecycle state. Only
        `PUBLIC` and `HIDDEN` are reachable via this endpoint — use `DELETE
        /products/{productId}` to archive.
      properties:
        state:
          type: string
          description: Target lifecycle state. `PUBLIC` makes the product visible on the
            storefront; `HIDDEN` keeps it unlisted. The sold-out (`available`)
            flag is preserved across the transition — use `PUT
            /products/{productId}/availability` to flip it.
          enum:
            - PUBLIC
            - HIDDEN
          example: PUBLIC
      required:
        - state
      title: Update Product State V1Request
    com.fourthwall.openapi.model.Image:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        url:
          type: string
          example: https://fourthwall.com/image.png
        width:
          type: integer
          format: int32
          description: The original width of the image in pixels.
          example: 800
        height:
          type: integer
          format: int32
          description: The original height of the image in pixels.
          example: 600
        transformedUrl:
          type: string
          description: Transformed URL with applied image processing (e.g., resizing,
            optimization)
          example: https://fourthwall.com/image.png
      required:
        - height
        - id
        - transformedUrl
        - url
        - width
      title: Image
    com.fourthwall.openapi.model.OfferAbstractV1.OfferAccessV1:
      discriminator:
        propertyName: type
        mapping:
          PUBLIC: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.Offe\
            rAccessV1.Public"
          HIDDEN: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.Offe\
            rAccessV1.Hidden"
          PRIVATE: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.Off\
            erAccessV1.Private"
          ARCHIVED: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.Of\
            ferAccessV1.Archived"
      properties:
        type:
          type: string
      required:
        - type
      title: Offer Access
    com.fourthwall.openapi.model.OfferAbstractV1.OfferAccessV1.Archived:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
            ccessV1"
        - type: object
          properties:
            type:
              type: string
              const: ARCHIVED
      title: Archived
    com.fourthwall.openapi.model.OfferAbstractV1.OfferAccessV1.Hidden:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
            ccessV1"
        - type: object
          properties:
            type:
              type: string
              const: HIDDEN
      title: Hidden
    com.fourthwall.openapi.model.OfferAbstractV1.OfferAccessV1.Private:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
            ccessV1"
        - type: object
          properties:
            type:
              type: string
              const: PRIVATE
      title: Private
    com.fourthwall.openapi.model.OfferAbstractV1.OfferAccessV1.Public:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
            ccessV1"
        - type: object
          properties:
            type:
              type: string
              const: PUBLIC
      title: Public
    com.fourthwall.openapi.model.OfferAbstractV1.OfferAdditionalInformationV1:
      type: object
      properties:
        sizeAndFit:
          type: string
        guaranteeAndReturns:
          type: string
        moreDetails:
          type: string
      title: Offer Additional Information
    com.fourthwall.openapi.model.OfferAbstractV1.OfferFullV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        name:
          type: string
          example: My t-shirt
        slug:
          type: string
          example: my-t-shirt
        description:
          type: string
          example: My t-shirt description
        type:
          type: string
          enum:
            - STANDARD
            - GIFT_CARD
            - UNKNOWN
        state:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferS\
                tateV1.Available"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferS\
                tateV1.SoldOut"
        access:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
                ccessV1.Archived"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
                ccessV1.Hidden"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
                ccessV1.Private"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
                ccessV1.Public"
        thumbnailImage:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.Image"
        images:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.Image"
        variants:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
              ariantAbstractV1.OfferVariantV1"
        additionalInformation:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferA\
            dditionalInformationV1"
        sizeGuide:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferS\
            izeGuideV1"
        digitalFiles:
          type: array
          description: Digital files attached to this offer. Only present for digital
            offers.
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.offer.DigitalFileV1"
        createdAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
        updatedAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
      required:
        - access
        - createdAt
        - description
        - id
        - images
        - name
        - slug
        - state
        - type
        - updatedAt
        - variants
      title: Offer Full
    com.fourthwall.openapi.model.OfferAbstractV1.OfferSizeGuideV1:
      type: object
      properties:
        previewUrl:
          type: string
        fileUrl:
          type: string
        description:
          type: string
        fitGuideDescription:
          type: string
        fitGuideUrls:
          type: array
          items:
            type: string
      required:
        - fitGuideUrls
      title: Offer Size Guide
    com.fourthwall.openapi.model.OfferAbstractV1.OfferStateV1:
      discriminator:
        propertyName: type
        mapping:
          AVAILABLE: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.O\
            fferStateV1.Available"
          SOLD_OUT: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.Of\
            ferStateV1.SoldOut"
      properties:
        type:
          type: string
      required:
        - type
      title: Offer State
    com.fourthwall.openapi.model.OfferAbstractV1.OfferStateV1.Available:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferS\
            tateV1"
        - type: object
          properties:
            type:
              type: string
              const: AVAILABLE
      title: Available
    com.fourthwall.openapi.model.OfferAbstractV1.OfferStateV1.SoldOut:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferS\
            tateV1"
        - type: object
          properties:
            type:
              type: string
              const: SOLD_OUT
      title: Sold Out
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Attributes:
      type: object
      properties:
        description:
          type: string
          example: Black, L
        color:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Attributes.Color"
        size:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Attributes.Size"
      required:
        - description
      title: Attributes
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Attributes.Color:
      type: object
      properties:
        name:
          type: string
          example: Black
        swatch:
          type: string
          example: "#000000"
      required:
        - name
        - swatch
      title: Color
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Attributes.Size:
      type: object
      properties:
        name:
          type: string
          example: L
      required:
        - name
      title: Size
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Dimensions:
      type: object
      properties:
        length:
          type: number
          example: 1
        width:
          type: number
          example: 2
        height:
          type: number
          example: 3
        unit:
          type: string
          example: cm
      required:
        - height
        - length
        - unit
        - width
      title: Dimensions
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.OfferVariantV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        name:
          type: string
          example: My t-shirt - Black, L
        sku:
          type: string
          example: WDEK-DRE200L
        unitPrice:
          $ref: "#/components/schemas/Money"
        compareAtPrice:
          $ref: "#/components/schemas/Money"
        unitCost:
          $ref: "#/components/schemas/Money"
        attributes:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Attributes"
        creatorDeclaredCost:
          $ref: "#/components/schemas/Money"
          description: Product cost as declared by the creator. Null if not set.
        stock:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
                ariantAbstractV1.Stock.Limited"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
                ariantAbstractV1.Stock.Unlimited"
        weight:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Weight"
        dimensions:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Dimensions"
        images:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.Image"
        thumbnailImage:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.Image"
      required:
        - attributes
        - dimensions
        - id
        - images
        - name
        - sku
        - stock
        - unitPrice
        - weight
      title: Offer Variant
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Stock:
      discriminator:
        propertyName: type
        mapping:
          UNLIMITED: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.O\
            fferVariantAbstractV1.Stock.Unlimited"
          LIMITED: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.Off\
            erVariantAbstractV1.Stock.Limited"
      properties:
        type:
          type: string
      required:
        - type
      title: Stock
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Stock.Limited:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Stock"
        - type: object
          properties:
            inStock:
              type: integer
              format: int32
              example: 5
        - type: object
          properties:
            type:
              type: string
              const: LIMITED
      required:
        - inStock
      title: Limited
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Stock.Unlimited:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Stock"
        - type: object
          properties:
            type:
              type: string
              const: UNLIMITED
      title: Unlimited
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.Weight:
      type: object
      properties:
        value:
          type: number
          example: 1
        unit:
          type: string
          example: kg
      required:
        - unit
        - value
      title: Weight
    com.fourthwall.openapi.model.offer.DigitalFileV1:
      type: object
      description: A digital file attached to an offer
      properties:
        uri:
          type: string
          description: The file URI
          example: https://storage.googleapis.com/bucket/shop/offer/file
        name:
          type: string
          description: The file name
          example: my-ebook.pdf
        fileSize:
          type: string
          description: Human-readable file size
          example: 15.4 MB
        mediaType:
          type: string
          description: MIME type of the file
          example: application/pdf
      required:
        - name
        - uri
      title: Digital File
    com.fourthwall.app.openapi.endpoint.OpenApiProductEndpoint.UpdateOfferAvailabilityV1Request:
      type: object
      properties:
        available:
          type: boolean
      required:
        - available
      title: Update Offer Availability V1Request
    com.fourthwall.app.openapi.endpoint.OpenApiOrderEndpoint.MarkDownloadAsDownloadedRequest:
      type: object
      properties:
        defaultFileUrl:
          type: string
      title: Mark Download As Downloaded Request
    com.fourthwall.app.openapi.endpoint.OpenApiGiveawayEndpoint.FinishGiveawayRequest:
      type: object
      properties:
        participants:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.OpenApiGiveaway\
              Endpoint.FinishGiveawayRequest.Participant"
      required:
        - participants
      title: Finish Giveaway Request
    com.fourthwall.app.openapi.endpoint.OpenApiGiveawayEndpoint.FinishGiveawayRequest.Participant:
      type: object
      properties:
        userId:
          type: string
        userName:
          type: string
      required:
        - userId
        - userName
      title: Participant
    com.fourthwall.app.openapi.endpoint.OpenApiGiveawayEndpoint.CreateGiveawayXResponse:
      type: object
      properties:
        id:
          type: string
        friendlyId:
          type: string
        drawIds:
          type: array
          items:
            type: string
      required:
        - drawIds
        - friendlyId
        - id
      title: Create Giveaway X Response
    com.fourthwall.app.openapi.endpoint.OpenApiGiveawayEndpoint.CreateGiveawayCheckoutXRequest:
      type: object
      properties:
        heading:
          type: string
        description:
          type: string
        iconUrl:
          type: string
        buttonText:
          type: string
        disabled:
          type: boolean
      required:
        - buttonText
        - description
        - heading
        - iconUrl
      title: Create Giveaway Checkout X Request
    com.fourthwall.app.openapi.endpoint.DrawFinishedRequest:
      type: object
      properties:
        participants:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.DrawFinishedReq\
                  uest.Participant.Twitch"
      required:
        - participants
      title: Draw Finished Request
    com.fourthwall.app.openapi.endpoint.DrawFinishedRequest.Participant:
      discriminator:
        propertyName: service
      properties:
        service:
          type: string
      required:
        - service
      title: Participant
    com.fourthwall.app.openapi.endpoint.DrawFinishedRequest.Participant.Twitch:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.DrawFinishedReq\
            uest.Participant"
        - type: object
          properties:
            userId:
              type: string
            userName:
              type: string
      required:
        - userId
        - userName
      title: Twitch
    com.fourthwall.openapi.model.GiftDraftV1:
      type: object
      properties:
        id:
          type: string
          example: gdr_EdJvIXu3SEiXe_QkPavHSA
        type:
          type: string
          enum:
            - INITIAL
            - REDO
        giveawayId:
          type: string
          example: giv_EdJvIXu3SEiXe_QkPavHSA
        giveawayFriendlyId:
          type: string
          example: D3XZFWPP
        shopId:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
        offer:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferG\
            iftPurchaseV1"
        amounts:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Amounts"
        email:
          type: string
          example: supporter@fourthwall.com
        username:
          type: string
          example: Johnny123
        message:
          type: string
          example: Sample message
        gifts:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.Avail\
                  able"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.Cance\
                  lled"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.Chang\
                  edToGiftCard"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.Chang\
                  edToPromotion"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.Redee\
                  med"
        createdAt:
          type: string
          format: date-time
        durationSeconds:
          type: integer
          format: int64
      required:
        - amounts
        - createdAt
        - durationSeconds
        - email
        - gifts
        - giveawayFriendlyId
        - giveawayId
        - id
        - offer
        - shopId
        - type
      title: Gift Draft
    com.fourthwall.openapi.model.GiftDraftV1.Amounts:
      type: object
      properties:
        subtotal:
          $ref: "#/components/schemas/Money"
        total:
          $ref: "#/components/schemas/Money"
      required:
        - subtotal
        - total
      title: Amounts
    com.fourthwall.openapi.model.GiftDraftV1.Gift:
      type: object
      discriminator:
        propertyName: status
        mapping:
          REDEEMED: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.R\
            edeemed"
          AVAILABLE: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.\
            Available"
          CANCELLED: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift.\
            Cancelled"
          CHANGED_TO_PROMOTION: "#/components/schemas/com.fourthwall.openapi.model.GiftDr\
            aftV1.Gift.ChangedToPromotion"
          CHANGED_TO_GIFT_CARD: "#/components/schemas/com.fourthwall.openapi.model.GiftDr\
            aftV1.Gift.ChangedToGiftCard"
      properties:
        id:
          type: string
        status:
          type: string
      required:
        - id
        - status
      title: Gift
    com.fourthwall.openapi.model.GiftDraftV1.Gift.Available:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: AVAILABLE
      required:
        - id
      title: Available
    com.fourthwall.openapi.model.GiftDraftV1.Gift.Cancelled:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: CANCELLED
      required:
        - id
      title: Cancelled
    com.fourthwall.openapi.model.GiftDraftV1.Gift.ChangedToGiftCard:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            giftCardId:
              type: string
              example: gcrd_EdJvIXu3SEiXe_QkPavHSA
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: CHANGED_TO_GIFT_CARD
      required:
        - giftCardId
        - id
        - winner
      title: Changed To Gift Card
    com.fourthwall.openapi.model.GiftDraftV1.Gift.ChangedToPromotion:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            promotionId:
              type: string
              example: prm_EdJvIXu3SEiXe_QkPavHSA
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: CHANGED_TO_PROMOTION
      required:
        - id
        - promotionId
        - winner
      title: Changed To Promotion
    com.fourthwall.openapi.model.GiftDraftV1.Gift.Redeemed:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            orderId:
              type: string
              example: 00aa4abd-5778-4199-8161-0b49b2f212e5
            orderFriendlyId:
              type: string
              example: D3XZFWPP
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: REDEEMED
      required:
        - id
        - orderFriendlyId
        - orderId
        - winner
      title: Redeemed
    com.fourthwall.openapi.model.GiftDraftV1.Winner:
      type: object
      properties:
        email:
          type: string
          example: supporter@fourthwall.com
        username:
          type: string
          example: Johnny123
        selectedAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
        redeemUri:
          type: string
      required:
        - redeemUri
        - selectedAt
      title: Winner
    com.fourthwall.openapi.model.OfferAbstractV1.OfferGiftPurchaseV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        name:
          type: string
          example: My t-shirt
        slug:
          type: string
          example: my-t-shirt
        description:
          type: string
          example: My t-shirt description
        primaryImage:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.Image"
      required:
        - description
        - id
        - name
        - slug
      title: Offer Gift Purchase
    ProductsPolicyXRequest:
      discriminator:
        propertyName: type
        mapping:
          ALL: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyXR\
            equest.AllProducts"
          SELECTED: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPol\
            icyXRequest.SelectedProducts"
          EXCLUDED: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPol\
            icyXRequest.ExcludedProducts"
      properties:
        type:
          type: string
      required:
        - type
      title: Products Policy X Request
    ShippingPolicyXRequest:
      discriminator:
        propertyName: type
        mapping:
          ALL_WINNER: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingP\
            olicyXRequest.AllWinner"
          ALL_CREATOR: "#/components/schemas/com.fourthwall.app.openapi.endpoint.Shipping\
            PolicyXRequest.AllCreator"
          MAX_CREATOR: "#/components/schemas/com.fourthwall.app.openapi.endpoint.Shipping\
            PolicyXRequest.MaxCreator"
      properties:
        type:
          type: string
      required:
        - type
      title: Shipping Policy X Request
    UpdateGiftingConfigXRequest:
      type: object
      description: The gifting rules to save.
      properties:
        enabled:
          type: boolean
          description: Master flag. Off pauses purchasability without losing the rest.
        entryTimeLimitSeconds:
          type: integer
          format: int32
          description: Entry time limit in seconds. Validated 20-180.
        shipping:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingPolicyX\
                Request.AllCreator"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingPolicyX\
                Request.AllWinner"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingPolicyX\
                Request.MaxCreator"
        products:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyX\
                Request.AllProducts"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyX\
                Request.ExcludedProducts"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyX\
                Request.SelectedProducts"
      required:
        - enabled
        - entryTimeLimitSeconds
        - products
        - shipping
      title: Update Gifting Config X Request
    com.fourthwall.app.openapi.endpoint.ProductsPolicyXRequest.AllProducts:
      allOf:
        - $ref: "#/components/schemas/ProductsPolicyXRequest"
        - type: object
          properties:
            type:
              type: string
              const: ALL
      title: All Products
    com.fourthwall.app.openapi.endpoint.ProductsPolicyXRequest.ExcludedProducts:
      allOf:
        - $ref: "#/components/schemas/ProductsPolicyXRequest"
        - type: object
          properties:
            offerIds:
              type: array
              items:
                type: string
                format: uuid
        - type: object
          properties:
            type:
              type: string
              const: EXCLUDED
      required:
        - offerIds
      title: Excluded Products
    com.fourthwall.app.openapi.endpoint.ProductsPolicyXRequest.SelectedProducts:
      allOf:
        - $ref: "#/components/schemas/ProductsPolicyXRequest"
        - type: object
          properties:
            offerIds:
              type: array
              items:
                type: string
                format: uuid
        - type: object
          properties:
            type:
              type: string
              const: SELECTED
      required:
        - offerIds
      title: Selected Products
    com.fourthwall.app.openapi.endpoint.ShippingPolicyXRequest.AllCreator:
      allOf:
        - $ref: "#/components/schemas/ShippingPolicyXRequest"
        - type: object
          properties:
            type:
              type: string
              const: ALL_CREATOR
      title: All Creator
    com.fourthwall.app.openapi.endpoint.ShippingPolicyXRequest.AllWinner:
      allOf:
        - $ref: "#/components/schemas/ShippingPolicyXRequest"
        - type: object
          properties:
            type:
              type: string
              const: ALL_WINNER
      title: All Winner
    com.fourthwall.app.openapi.endpoint.ShippingPolicyXRequest.MaxCreator:
      allOf:
        - $ref: "#/components/schemas/ShippingPolicyXRequest"
        - type: object
          properties:
            max:
              type: number
              format: double
        - type: object
          properties:
            type:
              type: string
              const: MAX_CREATOR
      required:
        - max
      title: Max Creator
    GiftingConfigXResponse:
      type: object
      description: A shop's saved gifting rules.
      properties:
        enabled:
          type: boolean
          description: Master "gift while live" flag.
        entryTimeLimitSeconds:
          type: integer
          format: int32
          description: Entry time limit in seconds (20-180), maps to the giveaway duration.
        shipping:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingPolicyX\
                Response.AllCreator"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingPolicyX\
                Response.AllWinner"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingPolicyX\
                Response.MaxCreator"
        products:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyX\
                Response.AllProducts"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyX\
                Response.ExcludedProducts"
            - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyX\
                Response.SelectedProducts"
        platform:
          type: string
          description: Current giveaway platform owning the shop's single gifting slot.
            Read-only conflict signal — TWITCH or STREAMELEMENTS means another
            integration owns the slot. A Kick shop operates on the OPEN_API
            slot.
          enum:
            - TWITCH
            - STREAMELEMENTS
            - OPEN_API
            - NOT_SELECTED
      required:
        - enabled
        - entryTimeLimitSeconds
        - platform
        - products
        - shipping
      title: Gifting Config X Response
    ProductsPolicyXResponse:
      discriminator:
        propertyName: type
        mapping:
          ALL: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPolicyXR\
            esponse.AllProducts"
          SELECTED: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPol\
            icyXResponse.SelectedProducts"
          EXCLUDED: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ProductsPol\
            icyXResponse.ExcludedProducts"
      properties:
        type:
          type: string
      required:
        - type
      title: Products Policy X Response
    ShippingPolicyXResponse:
      discriminator:
        propertyName: type
        mapping:
          ALL_WINNER: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingP\
            olicyXResponse.AllWinner"
          ALL_CREATOR: "#/components/schemas/com.fourthwall.app.openapi.endpoint.Shipping\
            PolicyXResponse.AllCreator"
          MAX_CREATOR: "#/components/schemas/com.fourthwall.app.openapi.endpoint.Shipping\
            PolicyXResponse.MaxCreator"
      properties:
        type:
          type: string
      required:
        - type
      title: Shipping Policy X Response
    com.fourthwall.app.openapi.endpoint.ProductsPolicyXResponse.AllProducts:
      allOf:
        - $ref: "#/components/schemas/ProductsPolicyXResponse"
        - type: object
          properties:
            type:
              type: string
              const: ALL
      title: All Products
    com.fourthwall.app.openapi.endpoint.ProductsPolicyXResponse.ExcludedProducts:
      allOf:
        - $ref: "#/components/schemas/ProductsPolicyXResponse"
        - type: object
          properties:
            offerIds:
              type: array
              items:
                type: string
                format: uuid
        - type: object
          properties:
            type:
              type: string
              const: EXCLUDED
      required:
        - offerIds
      title: Excluded Products
    com.fourthwall.app.openapi.endpoint.ProductsPolicyXResponse.SelectedProducts:
      allOf:
        - $ref: "#/components/schemas/ProductsPolicyXResponse"
        - type: object
          properties:
            offerIds:
              type: array
              items:
                type: string
                format: uuid
        - type: object
          properties:
            type:
              type: string
              const: SELECTED
      required:
        - offerIds
      title: Selected Products
    com.fourthwall.app.openapi.endpoint.ShippingPolicyXResponse.AllCreator:
      allOf:
        - $ref: "#/components/schemas/ShippingPolicyXResponse"
        - type: object
          properties:
            type:
              type: string
              const: ALL_CREATOR
      title: All Creator
    com.fourthwall.app.openapi.endpoint.ShippingPolicyXResponse.AllWinner:
      allOf:
        - $ref: "#/components/schemas/ShippingPolicyXResponse"
        - type: object
          properties:
            type:
              type: string
              const: ALL_WINNER
      title: All Winner
    com.fourthwall.app.openapi.endpoint.ShippingPolicyXResponse.MaxCreator:
      allOf:
        - $ref: "#/components/schemas/ShippingPolicyXResponse"
        - type: object
          properties:
            max:
              type: number
              format: double
        - type: object
          properties:
            type:
              type: string
              const: MAX_CREATOR
      required:
        - max
      title: Max Creator
    com.fourthwall.openapi.model.UpdateCollectionV1Request:
      type: object
      description: Request to update a collection
      properties:
        name:
          type: string
          example: My collection
        description:
          type: string
          example: My collection description
        offerIds:
          type: array
          description: List of product IDs to set in the collection
          items:
            type: string
            format: uuid
      title: Update Collection V1Request
    com.fourthwall.openapi.model.CollectionStateV1:
      description: Collection state
      discriminator:
        propertyName: type
        mapping:
          PUBLIC: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Pu\
            blic"
          HIDDEN: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Hi\
            dden"
          PRIVATE: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.P\
            rivate"
          ARCHIVED: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.\
            Archived"
      properties:
        type:
          type: string
      required:
        - type
      title: Collection State
    com.fourthwall.openapi.model.CollectionStateV1.Archived:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1"
        - type: object
          properties:
            type:
              type: string
              const: ARCHIVED
      description: Archived collection state
      title: Archived
    com.fourthwall.openapi.model.CollectionStateV1.Hidden:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1"
        - type: object
          properties:
            available:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: HIDDEN
      description: Hidden collection state
      required:
        - available
      title: Hidden
    com.fourthwall.openapi.model.CollectionStateV1.Private:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1"
        - type: object
          properties:
            available:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: PRIVATE
      description: Private collection state
      required:
        - available
      title: Private
    com.fourthwall.openapi.model.CollectionStateV1.Public:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1"
        - type: object
          properties:
            available:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: PUBLIC
      description: Public collection state
      required:
        - available
      title: Public
    com.fourthwall.openapi.model.CollectionV1:
      type: object
      properties:
        id:
          type: string
          example: col_b1EVARkUTcCTSfspQaXr1Q
        shopId:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
        name:
          type: string
          example: My collection
        slug:
          type: string
          example: my-collection
        description:
          type: string
          example: My collection description
        available:
          type: boolean
        state:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Arch\
                ived"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Hidd\
                en"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Priv\
                ate"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Publ\
                ic"
        offerIds:
          type: array
          items:
            type: string
            format: uuid
      required:
        - available
        - description
        - id
        - name
        - offerIds
        - shopId
        - slug
        - state
      title: Collection
    com.fourthwall.openapi.model.UpdateCollectionProductsV1Request:
      type: object
      description: Request to set the products in a collection
      properties:
        offerIds:
          type: array
          description: Full list of product IDs to set in the collection
          items:
            type: string
            format: uuid
      required:
        - offerIds
      title: Update Collection Products V1Request
    com.fourthwall.openapi.model.UpdateCollectionAvailabilityV1Request:
      type: object
      description: Request to update collection availability
      properties:
        available:
          type: boolean
      required:
        - available
      title: Update Collection Availability V1Request
    com.fourthwall.app.openapi.endpoint.OpenApiWebhookConfigurationEndpoint.WebhookConfigurationCreateRequest:
      type: object
      properties:
        url:
          type: string
        allowedTypes:
          type: array
          items:
            type: string
            enum:
              - ORDER_PLACED
              - ORDER_UPDATED
              - GIFT_PURCHASE
              - PRODUCT_CREATED
              - PRODUCT_UPDATED
              - DONATION
              - SUBSCRIPTION_PURCHASED
              - SUBSCRIPTION_EXPIRED
              - SUBSCRIPTION_CHANGED
              - NEWSLETTER_SUBSCRIBED
              - THANK_YOU_SENT
              - GIFT_DRAW_STARTED
              - GIFT_DRAW_ENDED
              - PROMOTION_CREATED
              - PROMOTION_UPDATED
              - PROMOTION_STATUS_CHANGED
              - PLATFORM_APP_DISCONNECTED
              - MEMBERSHIP_POST_UPSERTED
              - MEMBERSHIP_SERIES_UPSERTED
              - MEMBERSHIP_SERIES_DELETED
              - MEMBERSHIP_TAG_CREATED
              - MEMBERSHIP_TAG_UPDATED
              - MEMBERSHIP_TAG_DELETED
              - MEMBERSHIP_TIER_UPSERTED
              - MEMBERSHIP_TIER_DELETED
              - COLLECTION_UPDATED
              - CART_ABANDONED_1H
              - CART_ABANDONED_24H
              - CART_ABANDONED_72H
      required:
        - allowedTypes
        - url
      title: Webhook Configuration Create Request
    com.fourthwall.openapi.model.ThankYouContribution:
      discriminator:
        propertyName: type
        mapping:
          ORDER: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.\
            Order"
          DONATION: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContributi\
            on.Donation"
          GIFT_PURCHASE: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContr\
            ibution.GiftPurchase"
          MEMBERSHIP_PAYMENT_CHARGE: "#/components/schemas/com.fourthwall.openapi.model.T\
            hankYouContribution.Membership"
      properties:
        type:
          type: string
      required:
        - type
      title: Thank You Contribution
    com.fourthwall.openapi.model.ThankYouContribution.Donation:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution"
        - type: object
          properties:
            id:
              type: string
              example: don_Kpcjx4HIQ1e4bTIOjX9CsA
            shopId:
              type: string
              example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
            supporter:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.S\
                upporter"
        - type: object
          properties:
            type:
              type: string
              const: DONATION
      required:
        - id
        - shopId
        - supporter
      title: Donation
    com.fourthwall.openapi.model.ThankYouContribution.GiftPurchase:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution"
        - type: object
          properties:
            id:
              type: string
              example: giv_EdJvIXu3SEiXe_QkPavHSA
            shopId:
              type: string
              example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
            supporter:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.S\
                upporter"
        - type: object
          properties:
            type:
              type: string
              const: GIFT_PURCHASE
      required:
        - id
        - shopId
        - supporter
      title: Gift Purchase
    com.fourthwall.openapi.model.ThankYouContribution.Membership:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution"
        - type: object
          properties:
            id:
              type: string
              example: mpc_EdJvIXu3SEiXe_QkPavHSA
            shopId:
              type: string
              example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
            supporter:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.S\
                upporter"
        - type: object
          properties:
            type:
              type: string
              const: MEMBERSHIP_PAYMENT_CHARGE
      required:
        - id
        - shopId
        - supporter
      title: Membership
    com.fourthwall.openapi.model.ThankYouContribution.Order:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution"
        - type: object
          properties:
            id:
              type: string
              example: 00aa4abd-5778-4199-8161-0b49b2f212e5
            shopId:
              type: string
              example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
            supporter:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.S\
                upporter"
        - type: object
          properties:
            type:
              type: string
              const: ORDER
      required:
        - id
        - shopId
        - supporter
      title: Order
    com.fourthwall.openapi.model.ThankYouContribution.Supporter:
      type: object
      properties:
        email:
          type: string
          example: supporter@fourthwall.com
        username:
          type: string
          example: Johnny123
        message:
          type: string
          example: Sample message
      required:
        - email
      title: Supporter
    com.fourthwall.openapi.model.ThankYouV1:
      type: object
      properties:
        id:
          type: string
          example: ty_EdJvIXu3SEiXe_QkPavHSA
        mediaUrl:
          type: string
          example: https://fourthwall.com/thankyou/ty_EdJvIXu3SEiXe_QkPavHSA
        contribution:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.D\
                onation"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.G\
                iftPurchase"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.M\
                embership"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouContribution.O\
                rder"
      required:
        - contribution
        - id
        - mediaUrl
      title: Thank You
    com.fourthwall.openapi.model.samples.SampleCheckoutItemV1:
      type: object
      properties:
        variantId:
          type: string
        quantity:
          type: integer
          format: int32
      required:
        - quantity
        - variantId
      title: Sample Checkout Item
    com.fourthwall.openapi.model.samples.SampleCheckoutRequestV1:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.samples.SampleCheckout\
              ItemV1"
        challengeDefinitionId:
          type: string
      required:
        - items
      title: Sample Checkout Request
    com.fourthwall.openapi.model.samples.SampleCheckoutResponseV1:
      type: object
      properties:
        checkoutPath:
          type: string
      required:
        - checkoutPath
      title: Sample Checkout Response
    MEMBERSHIPS_MULTI:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiCreatePromotionRequest"
        - type: object
          properties:
            codes:
              type: array
              items:
                type: string
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Memberships.Percent\
                    age"
            requirements:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionRequirements.Memberships"
            subscriptionType:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipSubscriptionTypeApplie\
                    sTo.AllMembers"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipSubscriptionTypeApplie\
                    sTo.AnnualMembersOnly"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipSubscriptionTypeApplie\
                    sTo.MonthlyMembersOnly"
            tiers:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipTiersAppliesTo.AllTier\
                    s"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipTiersAppliesTo.Selecte\
                    dTiers"
        - type: object
          properties:
            type:
              type: string
              const: MEMBERSHIPS_MULTI
      required:
        - codes
        - discount
      title: MEMBERSHIPS_MULTI
    MEMBERSHIPS_SINGLE:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiCreatePromotionRequest"
        - type: object
          properties:
            code:
              type: string
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Memberships.Percent\
                    age"
            requirements:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionRequirements.Memberships"
            subscriptionType:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipSubscriptionTypeApplie\
                    sTo.AllMembers"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipSubscriptionTypeApplie\
                    sTo.AnnualMembersOnly"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipSubscriptionTypeApplie\
                    sTo.MonthlyMembersOnly"
            tiers:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipTiersAppliesTo.AllTier\
                    s"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionMembershipTiersAppliesTo.Selecte\
                    dTiers"
        - type: object
          properties:
            type:
              type: string
              const: MEMBERSHIPS_SINGLE
      required:
        - code
        - discount
      title: MEMBERSHIPS_SINGLE
    SHOP_MULTI:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiCreatePromotionRequest"
        - type: object
          properties:
            codes:
              type: array
              items:
                type: string
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Shop.FixedAmount"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Shop.FreeShipping"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Shop.Percentage"
            requirements:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionRequirements.Shop"
            appliesToProducts:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionSelectedProducts"
            limits:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionLimits"
        - type: object
          properties:
            type:
              type: string
              const: SHOP_MULTI
      required:
        - codes
        - discount
      title: SHOP_MULTI
    SHOP_SINGLE:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiCreatePromotionRequest"
        - type: object
          properties:
            code:
              type: string
            discount:
              oneOf:
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Shop.FixedAmount"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Shop.FreeShipping"
                - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                    promotions.OpenApiPromotionDiscountType.Shop.Percentage"
            requirements:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionRequirements.Shop"
            appliesToProducts:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionSelectedProducts"
            limits:
              $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
                promotions.OpenApiPromotionLimits"
        - type: object
          properties:
            type:
              type: string
              const: SHOP_SINGLE
      required:
        - code
        - discount
      title: SHOP_SINGLE
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiCreatePromotionRequest:
      discriminator:
        propertyName: type
        mapping:
          SHOP_SINGLE: "#/components/schemas/SHOP_SINGLE"
          SHOP_MULTI: "#/components/schemas/SHOP_MULTI"
          MEMBERSHIPS_SINGLE: "#/components/schemas/MEMBERSHIPS_SINGLE"
          MEMBERSHIPS_MULTI: "#/components/schemas/MEMBERSHIPS_MULTI"
      properties:
        type:
          type: string
      required:
        - type
      title: Open Api Create Promotion Request
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionDiscountType.Memberships:
      discriminator:
        propertyName: type
        mapping:
          PERCENTAGE: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.req\
            uests.promotions.OpenApiPromotionDiscountType.Memberships.Percentag\
            e"
      properties:
        type:
          type: string
      required:
        - type
      title: Memberships
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionDiscountType.Memberships.Percentage:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionDiscountType.Memberships"
        - type: object
          properties:
            percentage:
              type: number
        - type: object
          properties:
            type:
              type: string
              const: PERCENTAGE
      required:
        - percentage
      title: Percentage
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionDiscountType.Shop:
      discriminator:
        propertyName: type
        mapping:
          PERCENTAGE: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.req\
            uests.promotions.OpenApiPromotionDiscountType.Shop.Percentage"
          FLAT_RATE: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requ\
            ests.promotions.OpenApiPromotionDiscountType.Shop.FixedAmount"
          FREE_SHIPPING: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.\
            requests.promotions.OpenApiPromotionDiscountType.Shop.FreeShipping"
      properties:
        type:
          type: string
      required:
        - type
      title: Shop
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionDiscountType.Shop.FixedAmount:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionDiscountType.Shop"
        - type: object
          properties:
            money:
              $ref: "#/components/schemas/Money"
            freeShipping:
              type: boolean
        - type: object
          properties:
            type:
              type: string
              const: FLAT_RATE
      required:
        - freeShipping
        - money
      title: Fixed Amount
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionDiscountType.Shop.FreeShipping:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionDiscountType.Shop"
        - type: object
          properties:
            type:
              type: string
              const: FREE_SHIPPING
      title: Free Shipping
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionDiscountType.Shop.Percentage:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionDiscountType.Shop"
        - type: object
          properties:
            percentage:
              type: number
            shipping:
              type: string
              enum:
                - Excluded
                - Included
                - FreeLowestOnly
                - Free
        - type: object
          properties:
            type:
              type: string
              const: PERCENTAGE
      required:
        - percentage
        - shipping
      title: Percentage
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo:
      discriminator:
        propertyName: type
        mapping:
          ALL: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.p\
            romotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo.AllMe\
            mbers"
          MONTHLY: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.reques\
            ts.promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo.M\
            onthlyMembersOnly"
          ANNUAL: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.request\
            s.promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo.An\
            nualMembersOnly"
      properties:
        type:
          type: string
      required:
        - type
      title: Open Api Promotion Membership Subscription Type Applies To
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo.AllMembers:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo"
        - type: object
          properties:
            type:
              type: string
              const: ALL
      title: All Members
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo.AnnualMembersOnly:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo"
        - type: object
          properties:
            type:
              type: string
              const: ANNUAL
      title: Annual Members Only
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo.MonthlyMembersOnly:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionMembershipSubscriptionTypeAppliesTo"
        - type: object
          properties:
            type:
              type: string
              const: MONTHLY
      title: Monthly Members Only
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionMembershipTiersAppliesTo:
      discriminator:
        propertyName: type
        mapping:
          ALL: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.p\
            romotions.OpenApiPromotionMembershipTiersAppliesTo.AllTiers"
          SELECTED: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.reque\
            sts.promotions.OpenApiPromotionMembershipTiersAppliesTo.SelectedTie\
            rs"
      properties:
        type:
          type: string
      required:
        - type
      title: Open Api Promotion Membership Tiers Applies To
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionMembershipTiersAppliesTo.AllTiers:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionMembershipTiersAppliesTo"
        - type: object
          properties:
            type:
              type: string
              const: ALL
      title: All Tiers
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionMembershipTiersAppliesTo.SelectedTiers:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.model.requests.\
            promotions.OpenApiPromotionMembershipTiersAppliesTo"
        - type: object
          properties:
            ids:
              type: array
              items:
                type: string
        - type: object
          properties:
            type:
              type: string
              const: SELECTED
      required:
        - ids
      title: Selected Tiers
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionRequirements.Memberships:
      type: object
      properties:
        newMembersOnly:
          type: boolean
      required:
        - newMembersOnly
      title: Memberships
    com.fourthwall.app.openapi.endpoint.model.requests.promotions.OpenApiPromotionSelectedProducts:
      type: object
      properties:
        productIds:
          type: array
          items:
            type: string
            format: uuid
        oncePerOrder:
          type: boolean
      required:
        - productIds
      title: Open Api Promotion Selected Products
    CreateCustomizationProductRequestV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.offer.CreateProductReq\
            uestV1"
        - type: object
          properties:
            customizationId:
              type: string
              description: Id of the customization to build the product from, from `POST
                /open-api/v1.0/customizations`.
              example: cud_k66ZW4fsRm6c2def3itltA
            name:
              type: string
              description: Product name. Defaults to the product template name when omitted.
              example: My Awesome Design Tee
            description:
              type: string
              description: Product description
            profitMargin:
              type: number
              description: Profit margin in USD applied on top of the base cost.
              example: 10
            publishOnCreate:
              type: boolean
              description: Publish the product immediately on creation. Defaults to false
                (product stays hidden).
      description: Create a product from an existing customization (design sketch).
        The design pipeline renders the customization's stored design into
        mockups and creates a purchasable product — no regions or product
        template are supplied here, they come from the customization. Create the
        customization first via `POST /open-api/v1.0/customizations`. The
        product is created hidden unless `publishOnCreate` is true.
      required:
        - customizationId
        - type
      title: Create Customization Product Request
    CreateDesignProductRequestV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.offer.CreateProductReq\
            uestV1"
        - type: object
          properties:
            productTemplateId:
              type: string
              description: Id of the product template to render the design onto, from `GET
                /open-api/v1.0/product-templates`.
              example: pro_k66ZW4fsRm6c2def3itltA
            regions:
              type: array
              description: Design regions to place on the product. Each region references a
                registered media image by id (register it via `POST
                /open-api/v1.0/media/images` and pass the returned id as
                `imageId`).
              items:
                $ref: "#/components/schemas/ProductDesignRegionV1"
            colors:
              type: array
              description: Colors to render. Defaults to all available product colors when
                omitted. Values not offered by the product are ignored; the
                request is rejected with 400 if none of the supplied colors are
                available.
              items:
                type: string
            sizes:
              type: array
              description: Sizes to include. Defaults to all available product sizes when
                omitted. Values not offered by the product are ignored; the
                request is rejected with 400 if none of the supplied sizes are
                available. When both colors and sizes are supplied, the request
                is also rejected with 400 if no requested color/size combination
                is an available variant.
              items:
                type: string
            name:
              type: string
              description: Product name
              example: My Awesome Design Tee
            description:
              type: string
              description: Product description
              example: Limited edition design
            profitMargin:
              type: number
              description: Profit margin in USD applied on top of the base cost.
              example: 10
            publishOnCreate:
              type: boolean
              description: Publish the product immediately on creation. Defaults to false
                (product stays hidden).
      description: "Create a product by running the design pipeline: renders each
        region's registered image into mockups and creates a purchasable
        product. The product is created hidden unless `publishOnCreate` is
        true."
      required:
        - name
        - productTemplateId
        - regions
        - type
      title: Create Design Product Request
    CreateDigitalProductRequestV1:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.offer.CreateProductReq\
            uestV1"
        - type: object
          properties:
            name:
              type: string
              description: Product name
              example: My Digital Product
            description:
              type: string
              description: Product description
              example: A detailed description of my digital product
            price:
              type: number
              description: Price set by the creator, in USD.
              example: 19.99
            publishOnCreate:
              type: boolean
              description: Publish the product immediately on creation. Defaults to false
                (product stays hidden).
      description: Create a digital product with a creator-set price in USD and
        digital fulfillment. Attach files and images via the
        /products/{productId}/digital-files and /products/{productId}/images
        endpoints.
      required:
        - description
        - name
        - price
        - type
      title: Create Digital Product Request
    ProductDesignRegionV1:
      type: object
      description: A product region paired with the registered media image to render on it.
      properties:
        region:
          type: string
          description: Name of the product region to place the image on, e.g. `front` or
            `back`.
          example: front
        imageId:
          type: string
          description: Id of a registered media-library image to render on the region.
            Register the image first via `POST /open-api/v1.0/media/images` and
            pass the returned id here.
          example: img_k66ZW4fsRm6c2def3itltA
        placementId:
          type: string
          description: Placement to target when `placementStrategy` is `PLACEMENT_ID`.
            Required for that strategy and ignored by the others.
        placementStrategy:
          type: string
          description: >-
            How the image is placed on the region. Defaults to `AUTO` when
            omitted, and takes precedence over
            `placementId`/`fillAllPlacements`.

            - `AUTO` — let the renderer decide using the product's automation
            defaults (its preferred placement, or fill-all for products like
            mugs/stickers).

            - `FILL_ALL` — apply the image to every placement in the region.

            - `FULL_REGION` — render the image across the full region, skipping
            the preferred placement.

            - `PLACEMENT_ID` — target the single placement named by
            `placementId` (required for this strategy).
          enum:
            - AUTO
            - FILL_ALL
            - FULL_REGION
            - PLACEMENT_ID
          example: AUTO
      required:
        - imageId
        - region
      title: Product Design Region
    com.fourthwall.openapi.model.offer.CreateProductRequestV1:
      type: object
      description: Request to create a product. The shape is discriminated by the
        `type` field.
      discriminator:
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/CreateDesignProductRequestV1"
        - $ref: "#/components/schemas/CreateDigitalProductRequestV1"
        - $ref: "#/components/schemas/CreateCustomizationProductRequestV1"
      properties:
        type:
          type: string
      required:
        - type
      title: Create Product Request
    com.fourthwall.openapi.model.designpipeline.DesignPipelineImageV1:
      type: object
      properties:
        url:
          type: string
        width:
          type: integer
          format: int32
        height:
          type: integer
          format: int32
        style:
          type: string
        color:
          type: string
        size:
          type: string
        region:
          type: string
      required:
        - color
        - height
        - style
        - url
        - width
      title: Design Pipeline Image
    com.fourthwall.openapi.model.offer.CreateProductResponseV1:
      type: object
      description: Response returned after creating a product.
      properties:
        productId:
          type: string
          description: ID of the created product
        customizationId:
          type: string
          description: Customization used to back the product, when applicable
        images:
          type: array
          description: Rendered product images
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
              ipelineImageV1"
      required:
        - images
      title: Create Product Response
    com.fourthwall.openapi.model.offer.AttachProductImagesRequestV1:
      type: object
      description: Request to attach images to a product
      properties:
        images:
          type: array
          description: List of images to attach
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.offer.AttachProductIma\
              gesRequestV1.ImageInput"
      required:
        - images
      title: Attach Product Images Request
    com.fourthwall.openapi.model.offer.AttachProductImagesRequestV1.ImageInput:
      type: object
      properties:
        url:
          type: string
          description: Image URL
          example: https://fourthwall.com/image.png
        width:
          type: integer
          format: int32
          description: Image width in pixels
          example: 800
        height:
          type: integer
          format: int32
          description: Image height in pixels
          example: 600
      required:
        - height
        - url
        - width
      title: Image Input
    com.fourthwall.openapi.model.offer.ConfirmDigitalFileRequestV1:
      type: object
      description: Request to confirm and link an uploaded digital file to an offer
      properties:
        fileUrl:
          type: string
          description: The file URL returned from the upload-url endpoint
        fileName:
          type: string
          description: Display name for the file
          example: my-ebook.pdf
      required:
        - fileName
        - fileUrl
      title: Confirm Digital File Request
    com.fourthwall.openapi.model.offer.DigitalFileUploadRequestV1:
      type: object
      description: Request for a presigned upload URL for a digital file
      properties:
        fileName:
          type: string
          description: Name of the file
          example: artwork.png
        contentType:
          type: string
          description: MIME type of the file
          example: image/png
        size:
          type: integer
          format: int64
          description: Size of the file in bytes. Must match the
            `x-goog-content-length-range` header sent when uploading the bytes
            to `uploadUrl`.
          example: 1048576
      required:
        - contentType
        - fileName
        - size
      title: Digital File Upload Request
    com.fourthwall.openapi.model.offer.DigitalFileUploadResponseV1:
      type: object
      description: Response containing a presigned upload URL for a digital file
      properties:
        uploadUrl:
          type: string
          description: Presigned URL to upload the file to via HTTP PUT
        fileUrl:
          type: string
          description: The file URL reference to use when confirming the upload
      required:
        - fileUrl
        - uploadUrl
      title: Digital File Upload Response
    com.fourthwall.app.openapi.endpoint.TokenRequest:
      type: object
      description: OAuth 2.0 token request
      properties:
        client_id:
          type: string
          description: OAuth application client ID
          example: app_12345
        client_secret:
          type: string
          description: OAuth application client secret (required for confidential clients)
        redirect_uri:
          type: string
          description: Redirect URI used during authorization (required for
            authorization_code grant)
          example: https://example.com/callback
        grant_type:
          type: string
          description: OAuth grant type
          enum:
            - authorization_code
            - refresh_token
          example: authorization_code
        code:
          type: string
          description: Authorization code (required for authorization_code grant)
        refresh_token:
          type: string
          description: Refresh token (required for refresh_token grant)
        code_verifier:
          type: string
          description: PKCE code verifier (required for public clients using
            authorization_code grant)
      required:
        - client_id
        - grant_type
      title: Token Request
    com.fourthwall.openapi.model.media.RequestUploadUrlV1:
      type: object
      properties:
        fileName:
          type: string
          description: Name of the file
          example: artwork.png
        contentType:
          type: string
          description: MIME type of the file
          example: image/png
        size:
          type: integer
          format: int64
          description: Size of the file in bytes. Must match the
            `x-goog-content-length-range` header sent when uploading the bytes
            to `uploadUrl`.
          example: 1048576
      required:
        - contentType
        - fileName
        - size
      title: Request Upload Url
    com.fourthwall.openapi.model.media.UploadUrlResponseV1:
      type: object
      properties:
        uploadUrl:
          type: string
        fileUrl:
          type: string
        expiresAt:
          type: string
          format: date-time
      required:
        - fileUrl
        - uploadUrl
      title: Upload Url Response
    com.fourthwall.openapi.model.media.SaveMediaImageRequestV1:
      type: object
      properties:
        fileUrl:
          type: string
        width:
          type: integer
          format: int32
        height:
          type: integer
          format: int32
      required:
        - fileUrl
        - height
        - width
      title: Save Media Image Request
    com.fourthwall.openapi.model.media.MediaImageV1:
      type: object
      properties:
        id:
          type: string
        uri:
          type: string
        width:
          type: integer
          format: int32
        height:
          type: integer
          format: int32
        thumbnail:
          type: string
        preview:
          type: string
      required:
        - height
        - id
        - preview
        - thumbnail
        - uri
        - width
      title: Media Image
    com.fourthwall.app.openapi.endpoint.OpenApiGiveawayEndpoint.CreateGiveawayXRequest:
      type: object
      properties:
        offerId:
          type: string
          format: uuid
        quantity:
          type: integer
          format: int32
        username:
          type: string
        message:
          type: string
      required:
        - offerId
        - quantity
      title: Create Giveaway X Request
    com.fourthwall.app.openapi.endpoint.CreateGiveawayLinksV1Request:
      type: object
      properties:
        productId:
          type: string
          format: uuid
        number:
          type: integer
          format: int32
      required:
        - number
        - productId
      title: Create Giveaway Links V1Request
    com.fourthwall.openapi.model.GiveawayLinksV1:
      type: object
      properties:
        packageId:
          type: string
          example: gpg_EdJvIXu3SEiXe_QkPavHSA
        giveawayLinks:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.Giveaw\
                  ayLinkV1.Available"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.Giveaw\
                  ayLinkV1.Cancelled"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.Giveaw\
                  ayLinkV1.Redeemed"
      required:
        - giveawayLinks
        - packageId
      title: Giveaway Links
    com.fourthwall.openapi.model.GiveawayLinksV1.GiveawayLinkV1:
      discriminator:
        propertyName: status
        mapping:
          AVAILABLE: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.G\
            iveawayLinkV1.Available"
          CANCELLED: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.G\
            iveawayLinkV1.Cancelled"
          REDEEMED: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.Gi\
            veawayLinkV1.Redeemed"
      properties:
        status:
          type: string
      required:
        - status
      title: Giveaway Link
    com.fourthwall.openapi.model.GiveawayLinksV1.GiveawayLinkV1.Available:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.Giveaw\
            ayLinkV1"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            link:
              type: string
              example: https://fourthwall.com/gifts/gft_EdJvIXu3SEiXe_QkPavHSA
            productId:
              type: string
              example: 00aa4abd-5778-4199-8161-0b49b2f212e5
            createdAt:
              type: string
              format: date-time
              example: 2020-08-13T09:05:36.939Z
        - type: object
          properties:
            status:
              type: string
              const: AVAILABLE
      required:
        - createdAt
        - id
        - link
        - productId
      title: Available
    com.fourthwall.openapi.model.GiveawayLinksV1.GiveawayLinkV1.Cancelled:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.Giveaw\
            ayLinkV1"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            link:
              type: string
              example: https://fourthwall.com/gifts/gft_EdJvIXu3SEiXe_QkPavHSA
            productId:
              type: string
              example: 00aa4abd-5778-4199-8161-0b49b2f212e5
            createdAt:
              type: string
              format: date-time
              example: 2020-08-13T09:05:36.939Z
            cancelledAt:
              type: string
              format: date-time
              example: 2020-08-13T09:05:36.939Z
        - type: object
          properties:
            status:
              type: string
              const: CANCELLED
      required:
        - cancelledAt
        - createdAt
        - id
        - link
        - productId
      title: Cancelled
    com.fourthwall.openapi.model.GiveawayLinksV1.GiveawayLinkV1.Redeemed:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayLinksV1.Giveaw\
            ayLinkV1"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            link:
              type: string
              example: https://fourthwall.com/gifts/gft_EdJvIXu3SEiXe_QkPavHSA
            productId:
              type: string
              example: 00aa4abd-5778-4199-8161-0b49b2f212e5
            createdAt:
              type: string
              format: date-time
              example: 2020-08-13T09:05:36.939Z
            redeemedAt:
              type: string
              format: date-time
              example: 2020-08-13T09:05:36.939Z
        - type: object
          properties:
            status:
              type: string
              const: REDEEMED
      required:
        - createdAt
        - id
        - link
        - productId
        - redeemedAt
      title: Redeemed
    com.fourthwall.app.openapi.endpoint.CreateGiftingCheckoutV1Request:
      type: object
      properties:
        offerId:
          type: string
          description: The product offer to gift to live chat.
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        quantity:
          type: integer
          format: int32
          description: How many gifts to purchase.
          example: 1
          maximum: 10000
          minimum: 1
        currency:
          type: string
          description: Display currency for the checkout. Defaults to the shop's currency.
          enum:
            - USD
            - EUR
            - CAD
            - GBP
            - AUD
            - NZD
            - SEK
            - NOK
            - DKK
            - PLN
            - INR
            - JPY
            - MYR
            - SGD
            - MXN
            - BRL
            - CHF
          example: USD
      required:
        - offerId
        - quantity
      title: Create Gifting Checkout V1Request
    GiftingCheckoutV1:
      type: object
      properties:
        checkoutId:
          type: string
          description: Id of the created checkout.
          example: ch_BV44UYrXQA2T_Xcf1288tw
        checkoutUrl:
          type: string
          description: Absolute, directable checkout URL on the shop's domain.
          example: https://shop.fourthwall.com/checkout/ch_BV44UYrXQA2T_Xcf1288tw
      required:
        - checkoutId
        - checkoutUrl
      title: Gifting Checkout
    com.fourthwall.app.openapi.endpoint.FulfillmentItem:
      type: object
      properties:
        variantId:
          type: string
          format: uuid
        quantity:
          type: integer
          format: int32
          minimum: 1
      required:
        - quantity
        - variantId
      title: Fulfillment Item
    com.fourthwall.app.openapi.endpoint.FulfillmentRequest:
      type: object
      properties:
        orderId:
          type: string
          format: uuid
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.FulfillmentItem"
          minItems: 1
        shippingLabel:
          $ref: "#/components/schemas/com.fourthwall.app.openapi.endpoint.ShippingLabel"
      required:
        - items
        - orderId
        - shippingLabel
      title: Fulfillment Request
    com.fourthwall.app.openapi.endpoint.ShippingLabel:
      type: object
      properties:
        trackingNumber:
          type: string
          minLength: 1
        trackingCompany:
          type: string
          example: USPS
          examples:
            - DHL
            - UPS
            - USPS
            - Canada Post
          minLength: 1
      required:
        - trackingCompany
        - trackingNumber
      title: Shipping Label
    com.fourthwall.app.openapi.endpoint.FulfillmentResponse:
      type: object
      properties:
        fulfillmentId:
          type: string
      required:
        - fulfillmentId
      title: Fulfillment Response
    com.fourthwall.openapi.model.CreateExternalOrderRequest:
      type: object
      properties:
        externalOrderId:
          type: string
          example: ETSY-123456789
          minLength: 1
        externalSource:
          type: string
          example: ETSY
          minLength: 1
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderItemWithI\
              dRequest"
          minItems: 1
        shippingAddress:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderAddressRe\
            quest"
        billingAddress:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderAddressRe\
            quest"
        customerEmail:
          type: string
          example: customer@example.com
        metadata:
          type: object
          additionalProperties:
            type: string
        taxOverride:
          type: string
          description: Admin-only tax treatment override. COLLECT forces tax collection;
            SKIP forces no tax. Omit to use the default merchant-of-record
            rules. Honored only for internal Fourthwall admins; any other caller
            that sets it is rejected.
          enum:
            - COLLECT
            - SKIP
          example: SKIP
        taxOverrideReason:
          type: string
          description: Justification for the override. Required when taxOverride = SKIP.
          example: Customer is the merchant of record (resale)
      required:
        - billingAddress
        - externalOrderId
        - externalSource
        - items
        - shippingAddress
      title: Create External Order Request
    com.fourthwall.openapi.model.ExternalOrderAddressRequest:
      type: object
      properties:
        firstName:
          type: string
          example: John
          minLength: 1
        lastName:
          type: string
          example: Doe
          minLength: 1
        address1:
          type: string
          example: 123 Main Street
          minLength: 1
        address2:
          type: string
          example: Apt 4B
        city:
          type: string
          example: San Francisco
          minLength: 1
        state:
          type: string
          example: CA
        zip:
          type: string
          example: "94105"
          minLength: 1
        country:
          type: string
          example: US
          minLength: 1
        phone:
          type: string
          example: +1-555-123-4567
      required:
        - address1
        - city
        - country
        - firstName
        - lastName
        - zip
      title: External Order Address Request
    com.fourthwall.openapi.model.ExternalOrderItemWithIdRequest:
      type: object
      properties:
        variantId:
          type: string
          example: c2b6d0e3-4f5g-6h7i-8j9k-0l1m2n3o4p5q
          minLength: 1
        quantity:
          type: integer
          format: int32
          example: 2
          minimum: 1
        externalLineItemId:
          type: string
          example: etsy-line-item-123
      required:
        - quantity
        - variantId
      title: External Order Item With Id Request
    com.fourthwall.openapi.model.ExternalOrderAddressV1:
      type: object
      properties:
        firstName:
          type: string
          example: John
        lastName:
          type: string
          example: Doe
        address1:
          type: string
          example: 123 Main Street
        address2:
          type: string
          example: Apt 4B
        city:
          type: string
          example: San Francisco
        state:
          type: string
          example: CA
        zip:
          type: string
          example: "94105"
        country:
          type: string
          example: US
        phone:
          type: string
          example: +1-555-123-4567
      required:
        - address1
        - city
        - country
        - firstName
        - lastName
        - zip
      title: External Order Address
    com.fourthwall.openapi.model.ExternalOrderCostsV1:
      type: object
      properties:
        fulfillmentFee:
          $ref: "#/components/schemas/Money"
        manufacturingCost:
          $ref: "#/components/schemas/Money"
        shippingCost:
          $ref: "#/components/schemas/Money"
        totalCreatorCost:
          $ref: "#/components/schemas/Money"
      required:
        - fulfillmentFee
        - manufacturingCost
        - shippingCost
        - totalCreatorCost
      title: External Order Costs
    com.fourthwall.openapi.model.ExternalOrderItemV1:
      type: object
      properties:
        offerId:
          type: string
          format: uuid
        variantId:
          type: string
          format: uuid
        quantity:
          type: integer
          format: int32
          example: 2
        externalLineItemId:
          type: string
          example: etsy-line-item-123
        unitCost:
          $ref: "#/components/schemas/Money"
        totalCost:
          $ref: "#/components/schemas/Money"
        itemFulfillmentFee:
          $ref: "#/components/schemas/Money"
        itemShippingCost:
          $ref: "#/components/schemas/Money"
        itemTotalCreatorCost:
          $ref: "#/components/schemas/Money"
      required:
        - itemFulfillmentFee
        - itemShippingCost
        - itemTotalCreatorCost
        - offerId
        - quantity
        - totalCost
        - unitCost
        - variantId
      title: External Order Item
    com.fourthwall.openapi.model.ExternalOrderV1:
      type: object
      properties:
        orderId:
          type: string
          format: uuid
          example: b1a5c9d2-3e4f-5a6b-7c8d-9e0f1a2b3c4d
        externalOrderId:
          type: string
          example: ETSY-123456789
        externalSource:
          type: string
          example: ETSY
        friendlyId:
          type: string
          example: T4YTE8HA
        status:
          type: string
          example: CONFIRMED
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderItemV1"
        shippingAddress:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderAddressV1"
        costs:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderCostsV1"
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - costs
        - createdAt
        - externalOrderId
        - externalSource
        - friendlyId
        - items
        - orderId
        - shippingAddress
        - status
        - updatedAt
      title: External Order
    com.fourthwall.openapi.model.CancelExternalOrderRequest:
      type: object
      properties:
        reason:
          type: string
          description: Reason for cancellation (for audit purposes)
          example: Customer requested cancellation on marketplace
          minLength: 1
        forceCancel:
          type: boolean
          description: If true, bypasses IN_PRODUCTION and ON_HOLD restrictions (cannot
            bypass PACKAGED or SHIPPED)
          example: false
      required:
        - forceCancel
        - reason
      title: Cancel External Order Request
    com.fourthwall.openapi.model.CancelExternalOrderResponseV1:
      type: object
      description: Result of an external order cancellation request
      properties:
        externalOrderId:
          type: string
          example: ETSY-123456789
        externalSource:
          type: string
          example: ETSY
        fourthwallOrderId:
          type: string
          format: uuid
          example: b1a5c9d2-3e4f-5a6b-7c8d-9e0f1a2b3c4d
        status:
          type: string
          description: Overall cancellation status
          example: CANCELLED
        cancelledFulfillments:
          type: array
          description: Fulfillments that were successfully cancelled
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.CancelledFulfillmentIn\
              foV1"
        skippedFulfillments:
          type: array
          description: Fulfillments that were skipped (could not be cancelled)
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.SkippedFulfillmentInfo\
              V1"
      required:
        - cancelledFulfillments
        - externalOrderId
        - externalSource
        - fourthwallOrderId
        - skippedFulfillments
        - status
      title: Cancel External Order Response
    com.fourthwall.openapi.model.CancelledFulfillmentInfoV1:
      type: object
      description: Information about a cancelled fulfillment
      properties:
        fulfillmentId:
          type: string
          example: ful_EdJvIXu3SEiXe_QkPavHSA
        previousStatus:
          type: string
          description: Status before cancellation
          example: ACCEPTED
        provider:
          type: string
          example: PRINTFUL
        itemCount:
          type: integer
          format: int32
          description: Number of items in this fulfillment
          example: 1
      required:
        - fulfillmentId
        - itemCount
        - previousStatus
        - provider
      title: Cancelled Fulfillment Info
    com.fourthwall.openapi.model.SkippedFulfillmentInfoV1:
      type: object
      description: Information about a skipped (not cancelled) fulfillment
      properties:
        fulfillmentId:
          type: string
          example: ful_EdJvIXu3SEiXe_QkPavHSA
        status:
          type: string
          example: PACKAGED
        reason:
          type: string
          description: Reason why this fulfillment was skipped
          example: PACKAGED
        itemCount:
          type: integer
          format: int32
          description: Number of items in this fulfillment
          example: 1
      required:
        - fulfillmentId
        - itemCount
        - reason
        - status
      title: Skipped Fulfillment Info
    com.fourthwall.openapi.model.ExternalOrderItemRequest:
      type: object
      properties:
        variantId:
          type: string
          example: c2b6d0e3-4f5g-6h7i-8j9k-0l1m2n3o4p5q
          minLength: 1
        quantity:
          type: string
          example: 2
          minimum: 1
      required:
        - quantity
        - variantId
      title: External Order Item Request
    com.fourthwall.openapi.model.ValidateExternalOrderRequest:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderItemReque\
              st"
          minItems: 1
        shippingAddress:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderAddressRe\
            quest"
      required:
        - items
        - shippingAddress
      title: Validate External Order Request
    com.fourthwall.openapi.model.DeliveryEstimateDto:
      type: object
      properties:
        minDate:
          type: string
          format: date
        maxDate:
          type: string
          format: date
      required:
        - maxDate
        - minDate
      title: Delivery Estimate Dto
    com.fourthwall.openapi.model.ValidateExternalOrderResponse:
      type: object
      properties:
        valid:
          type: boolean
        errors:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ValidationErrorDto"
        estimatedCosts:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderCostsV1"
        estimatedDelivery:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.DeliveryEstimateDto"
      required:
        - valid
      title: Validate External Order Response
    com.fourthwall.openapi.model.ValidationErrorDto:
      type: object
      properties:
        code:
          type: string
        field:
          type: string
        message:
          type: string
      required:
        - code
        - field
        - message
      title: Validation Error Dto
    com.fourthwall.openapi.model.dns.DnsRecordV1:
      type: object
      properties:
        recordType:
          type: string
        host:
          type: string
        value:
          type: string
        status:
          type: string
        validationError:
          type: string
        alias:
          type: string
        priority:
          type: integer
          format: int32
      required:
        - alias
        - recordType
        - status
      title: Dns Record
    com.fourthwall.openapi.model.dns.DnsStatusV1:
      type: object
      properties:
        domain:
          type: string
        status:
          type: string
          enum:
            - CONNECTED
            - NOT_CONNECTED
            - PARTIALLY_CONNECTED
            - SYNCING_YOUR_DOMAIN
            - REMOVAL_IN_PROGRESS
        records:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.dns.DnsRecordV1"
        dnsProvider:
          type: string
        dnsProviderMode:
          type: string
        sslSynced:
          type: boolean
      required:
        - records
      title: Dns Status
    com.fourthwall.openapi.model.designpipeline.CreateDesignPipelinePreviewRequestV1:
      type: object
      properties:
        customizationId:
          type: string
        productId:
          type: string
        regions:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
              ipelineRegionV1"
        colors:
          type: array
          items:
            type: string
        sizes:
          type: array
          items:
            type: string
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Arbitrary key-value metadata stored on the pipeline and returned by
            the status endpoint. At most 25 entries; keys up to 100 characters,
            values up to 1000 characters.
      required:
        - regions
      title: Create Design Pipeline Preview Request
    com.fourthwall.openapi.model.designpipeline.DesignPipelineRegionV1:
      type: object
      properties:
        region:
          type: string
          description: Name of the product region to place the image on, e.g. `front` or
            `back`.
          example: front
        url:
          type: string
          description: URL of the image to render on the region. Required unless `imageId`
            is given; `imageId` takes precedence when both are present.
        imageId:
          type: string
          description: Id of a media image already saved via `POST
            /open-api/v1.0/media/images`. When set, the region renders that
            saved image and `url` is ignored — letting one upload back many
            previews without re-registering. Required unless `url` is given.
        placementId:
          type: string
          description: Placement to target when `placementStrategy` is `PLACEMENT_ID`.
            Required for that strategy and ignored by the others.
        placementStrategy:
          type: string
          description: >-
            How the image is placed on the region. Defaults to `AUTO` when
            omitted, and takes precedence over
            `placementId`/`fillAllPlacements`.

            - `AUTO` — let the renderer decide using the product's automation
            defaults (its preferred placement, or fill-all for products like
            mugs/stickers).

            - `FILL_ALL` — apply the image to every placement in the region.

            - `FULL_REGION` — render the image across the full region, skipping
            the preferred placement.

            - `PLACEMENT_ID` — target the single placement named by
            `placementId` (required for this strategy).
          enum:
            - AUTO
            - FILL_ALL
            - FULL_REGION
            - PLACEMENT_ID
          example: AUTO
        width:
          type: integer
          format: int32
          description: Image width in pixels. Provide with `height` so the image can be
            registered as a reusable media asset.
        height:
          type: integer
          format: int32
          description: Image height in pixels. Provide with `width` so the image can be
            registered as a reusable media asset.
      required:
        - region
      title: Design Pipeline Region
    com.fourthwall.openapi.model.designpipeline.CreateDesignPipelinePreviewResponseV1:
      type: object
      properties:
        pipelineId:
          type: string
        customizationId:
          type: string
        images:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
              ipelineImageV1"
      required:
        - pipelineId
      title: Create Design Pipeline Preview Response
    com.fourthwall.openapi.model.designpipeline.CreateDesignPipelineOfferRequestV1:
      type: object
      properties:
        productId:
          type: string
        regions:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
              ipelineRegionV1"
        colors:
          type: array
          items:
            type: string
        sizes:
          type: array
          items:
            type: string
        name:
          type: string
        description:
          type: string
        profitMargin:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
            ipelineProfitMarginV1"
        publishOnCreate:
          type: boolean
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Arbitrary key-value metadata stored on the pipeline and returned by
            the status endpoint. At most 25 entries; keys up to 100 characters,
            values up to 1000 characters.
      required:
        - name
        - productId
        - regions
      title: Create Design Pipeline Offer Request
    com.fourthwall.openapi.model.designpipeline.DesignPipelineProfitMarginV1:
      type: object
      deprecated: true
      description: Deprecated. Profit margin is now a plain USD number on POST
        /open-api/v1.0/products. This { amount, currency } object form is
        retained only for the legacy design-pipeline offers endpoint; currency
        must be USD.
      properties:
        amount:
          type: string
        currency:
          type: string
      required:
        - amount
        - currency
      title: Design Pipeline Profit Margin
    com.fourthwall.openapi.model.designpipeline.CreateDesignPipelineOfferResponseV1:
      type: object
      properties:
        pipelineId:
          type: string
        offerId:
          type: string
        customizationId:
          type: string
        images:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
              ipelineImageV1"
      required:
        - pipelineId
      title: Create Design Pipeline Offer Response
    CreateCustomizationRequestV1:
      type: object
      description: "Create a shop-bound customization (design sketch) for a product
        template. When `regions` are supplied, the sync design pipeline runs
        immediately and the response carries the rendered preview images; with
        no regions, only the sketch is created and the response carries
        `pipelineId: null` and an empty `images` list. To iterate, re-POST with
        adjusted selections — there is no update-in-place."
      properties:
        productTemplateId:
          type: string
          description: Id of the product template the sketch targets, from `GET
            /open-api/v1.0/product-templates`. Same id space as
            `CreateDesignProductRequestV1.productTemplateId`.
          example: pro_k66ZW4fsRm6c2def3itltA
        regions:
          type: array
          description: Design regions to render on the product. Each region references a
            registered media-library image by id (register first via `POST
            /open-api/v1.0/media/images` and pass the returned id as `imageId`).
            Omit or pass an empty list to create the sketch without running the
            pipeline.
          items:
            $ref: "#/components/schemas/ProductDesignRegionV1"
        colors:
          type: array
          description: Colors to render. Defaults to all available product colors.
          items:
            type: string
        sizes:
          type: array
          description: Sizes to include. Defaults to all available product sizes.
          items:
            type: string
      required:
        - productTemplateId
      title: Create Customization Request
    CreateCustomizationResponseV1:
      type: object
      description: Response from creating a customization. `pipelineId` and `images`
        are populated only when `regions` were supplied in the request.
      properties:
        customizationId:
          type: string
          description: Id of the newly created customization sketch.
          example: cst_k66ZW4fsRm6c2def3itltA
        pipelineId:
          type: string
          description: Id of the design pipeline run; null when no regions were supplied.
          example: dpl_k66ZW4fsRm6c2def3itltA
        images:
          type: array
          description: Rendered preview images. Empty when no regions were supplied.
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
              ipelineImageV1"
      required:
        - customizationId
        - images
      title: Create Customization Response
    com.fourthwall.openapi.model.CreateCollectionV1Request:
      type: object
      description: Request to create a new collection
      properties:
        name:
          type: string
          example: My collection
        description:
          type: string
          example: My collection description
        offerIds:
          type: array
          description: List of product IDs to include in the collection
          items:
            type: string
            format: uuid
      required:
        - description
        - name
        - offerIds
      title: Create Collection V1Request
    com.fourthwall.openapi.model.CartItemRequestV1:
      type: object
      properties:
        variantId:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        quantity:
          type: integer
          format: int32
          example: 1
          maximum: 10000
          minimum: 1
      required:
        - quantity
        - variantId
      title: Cart Item Request
    com.fourthwall.openapi.model.CreateCartRequestV1:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.CartItemRequestV1"
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Custom metadata key-value pairs. Max 10 keys, keys must be
            alphanumeric with underscores, max 256 chars per key, max 512 bytes
            per value, max 2KB total.
          example:
            asset_id: abc123
            campaign: summer_2026
      required:
        - items
      title: Create Cart Request
    com.fourthwall.openapi.model.CartProductV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        name:
          type: string
          example: My t-shirt
        slug:
          type: string
          example: my-t-shirt
      required:
        - id
        - name
        - slug
      title: Cart Product
    com.fourthwall.openapi.model.CartV1:
      type: object
      properties:
        id:
          type: string
          example: a1b2c3d4-5678-90ab-cdef-1234567890ab
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.CartV1.CartItemV1"
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Custom metadata key-value pairs.
          example:
            asset_id: abc123
            campaign: summer_2026
      required:
        - id
        - items
      title: Cart
    com.fourthwall.openapi.model.CartV1.CartItemV1:
      type: object
      properties:
        variant:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.CartVariantV1"
        quantity:
          type: integer
          format: int32
          example: 5
      required:
        - quantity
        - variant
      title: Cart Item
    com.fourthwall.openapi.model.CartVariantV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        name:
          type: string
          example: My t-shirt - Black, L
        sku:
          type: string
          example: WDEK-DRE200L
        unitPrice:
          $ref: "#/components/schemas/Money"
        compareAtPrice:
          $ref: "#/components/schemas/Money"
        attributes:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Attributes"
        stock:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
                ariantAbstractV1.Stock.Limited"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
                ariantAbstractV1.Stock.Unlimited"
        weight:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Weight"
        dimensions:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Dimensions"
        images:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.Image"
        product:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.CartProductV1"
      required:
        - attributes
        - dimensions
        - id
        - images
        - name
        - product
        - sku
        - stock
        - unitPrice
        - weight
      title: Cart Variant
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.WebhookConfigurationV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.WebhookConfigurationV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Webhook Configuration
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.WebhookEventV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.WebhookEventV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Webhook Event
    com.fourthwall.openapi.model.WebhookEventV1:
      type: object
      description: Webhook event
      properties:
        id:
          type: string
          description: Event ID
        type:
          type: string
          description: Event type
          enum:
            - ORDER_PLACED
            - ORDER_UPDATED
            - GIFT_PURCHASE
            - PRODUCT_CREATED
            - PRODUCT_UPDATED
            - DONATION
            - SUBSCRIPTION_PURCHASED
            - SUBSCRIPTION_EXPIRED
            - SUBSCRIPTION_CHANGED
            - NEWSLETTER_SUBSCRIBED
            - THANK_YOU_SENT
            - GIFT_DRAW_STARTED
            - GIFT_DRAW_ENDED
            - PROMOTION_CREATED
            - PROMOTION_UPDATED
            - PROMOTION_STATUS_CHANGED
            - PLATFORM_APP_DISCONNECTED
            - MEMBERSHIP_POST_UPSERTED
            - MEMBERSHIP_SERIES_UPSERTED
            - MEMBERSHIP_SERIES_DELETED
            - MEMBERSHIP_TAG_CREATED
            - MEMBERSHIP_TAG_UPDATED
            - MEMBERSHIP_TAG_DELETED
            - MEMBERSHIP_TIER_UPSERTED
            - MEMBERSHIP_TIER_DELETED
            - COLLECTION_UPDATED
            - CART_ABANDONED_1H
            - CART_ABANDONED_24H
            - CART_ABANDONED_72H
        apiVersion:
          type: string
          description: API version
          enum:
            - V1
        createdAt:
          type: string
          format: date-time
          description: When the event was created
        updatedAt:
          type: string
          format: date-time
          description: When the event was last updated
        body:
          type: string
          description: Event body as JSON string
        testMode:
          type: boolean
          description: Whether this is a test mode event
          example: false
        state:
          type: string
          description: Event state
        error:
          type: string
          description: Error message if delivery failed
        url:
          type: string
          description: URL
      required:
        - apiVersion
        - body
        - createdAt
        - id
        - state
        - testMode
        - type
        - updatedAt
        - url
      title: Webhook Event
    com.fourthwall.openapi.model.KudosMoneyV1:
      type: object
      properties:
        amount:
          type: number
          example: 5
        currency:
          type: string
          example: USD
      required:
        - amount
        - currency
      title: Kudos Money
    com.fourthwall.openapi.model.KudosOrderV1:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for this kudos contribution
          example: kd_EdJvIXu3SEiXe_QkPavHSA
        orderId:
          type: string
          description: The order/contribution ID
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        supporter:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.KudosSupporterV1"
        products:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.KudosProductV1"
        message:
          type: string
          description: Optional message from the supporter
          example: Sample message
        total:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.KudosMoneyV1"
        state:
          type: string
          enum:
            - WAITING
            - SKIPPED
            - SENT
            - CANCELLED
        createdAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
      required:
        - createdAt
        - id
        - orderId
        - products
        - state
        - supporter
        - total
      title: Kudos Order
    com.fourthwall.openapi.model.KudosProductV1:
      type: object
      properties:
        title:
          type: string
          example: My t-shirt
        thumbnailUrl:
          type: string
          example: https://fourthwall.com/image.png
      required:
        - title
      title: Kudos Product
    com.fourthwall.openapi.model.KudosSupporterV1:
      type: object
      properties:
        email:
          type: string
          example: supporter@fourthwall.com
        fullName:
          type: string
          example: Johnny123
      required:
        - email
      title: Kudos Supporter
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.KudosOrderV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.KudosOrderV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Kudos Order
    com.fourthwall.openapi.model.ShopV1:
      type: object
      properties:
        id:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
        name:
          type: string
        domain:
          type: string
        publicDomain:
          type: string
        status:
          type: string
          enum:
            - LIVE
            - COMING_SOON
            - PASSWORD_PROTECTED
      required:
        - domain
        - id
        - name
        - publicDomain
        - status
      title: Shop
    com.fourthwall.openapi.model.AddressV1:
      type: object
      properties:
        name:
          type: string
        address1:
          type: string
        address2:
          type: string
        city:
          type: string
        state:
          type: string
        zip:
          type: string
        country:
          type: string
      required:
        - address1
        - address2
        - city
        - country
        - name
        - state
        - zip
      title: Address
    com.fourthwall.openapi.model.ContactInfoV1:
      type: object
      properties:
        shopEmail:
          type: string
        contactEmail:
          type: string
        transactionalEmail:
          type: string
        customerSupportEmail:
          type: string
        phone:
          type: string
        shopName:
          type: string
        domain:
          type: string
        location:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.AddressV1"
      required:
        - contactEmail
        - domain
        - location
        - phone
        - shopEmail
        - shopName
        - transactionalEmail
      title: Contact Info
    com.fourthwall.openapi.model.samples.SampleBalanceV1:
      type: object
      properties:
        balance:
          type: string
        balanceWithIncentive:
          type: string
        currency:
          type: string
      title: Sample Balance
    com.fourthwall.openapi.model.reports.ReportColumnV1:
      type: object
      properties:
        key:
          type: string
        type:
          type: string
        label:
          type: string
      required:
        - key
        - label
        - type
      title: Report Column
    com.fourthwall.openapi.model.reports.ReportDefinitionV1:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        columns:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.reports.ReportColumnV1"
        availablePrecisions:
          type: array
          items:
            type: string
      required:
        - availablePrecisions
        - columns
        - id
        - name
      title: Report Definition
    com.fourthwall.openapi.model.reports.ReportDataV1:
      type: object
      properties:
        reportId:
          type: string
        columns:
          type: array
          items:
            type: string
        rows:
          type: array
          items:
            type: object
            additionalProperties: {}
        summary: {}
      required:
        - columns
        - reportId
        - rows
      title: Report Data
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.promotions.PromotionV1:
      type: object
      properties:
        results:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.AutoApplyin\
                  gShopPromotionV1"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiMember\
                  shipsPromotionV1"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.MultiShopPr\
                  omotionV1"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.SingleMembe\
                  rshipsPromotionV1"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.SingleShopP\
                  romotionV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Promotion
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.OfferAbstractV1.OfferFullV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferF\
              ullV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Offer Full
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.StockV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.StockV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Stock
    com.fourthwall.openapi.model.StockV1:
      type: object
      properties:
        variantId:
          type: string
          format: uuid
        quantity:
          type: integer
          format: int32
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - createdAt
        - quantity
        - updatedAt
        - variantId
      title: Stock
    com.fourthwall.openapi.model.MoneyV1:
      type: object
      description: Money amount with currency
      properties:
        amount:
          type: number
          description: Amount value
          example: 24.99
        currency:
          type: string
          description: Currency code (ISO 4217)
          example: USD
      required:
        - amount
        - currency
      title: Money
    com.fourthwall.openapi.model.ProductTemplateListV1:
      type: object
      description: Paginated list of product templates
      properties:
        results:
          type: array
          description: List of product template summaries
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplateSummary\
              V1"
        total:
          type: integer
          format: int32
          description: Total number of product templates matching the query
      required:
        - results
        - total
      title: Product Template List
    com.fourthwall.openapi.model.ProductTemplateSummaryV1:
      type: object
      description: Summary information about a product template
      properties:
        productId:
          type: string
          description: Product template ID
          example: pro_k66ZW4fsRm6c2def3itltA
        name:
          type: string
          description: Product name
          example: Classic T-Shirt
        category:
          type: string
          description: Product category path
          example: apparel/t-shirts
        brand:
          type: string
          description: Brand name
          example: Bella+Canvas
        thumbnail:
          type: string
          description: Thumbnail image URL
        basePrice:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.MoneyV1"
          description: Base price for the product
        productionMethod:
          type: string
          description: Production method (e.g. DTG, EMBROIDERY, DTFX, KNITTING, SUBLIMATION)
          example: DTG
        supportsBackendRendering:
          type: boolean
          description: Whether this product can be rendered by the backend rendering
            pipeline (V3 Instant Designer, excluding KNITWISE). Products where
            this is false may have null regionIds on customizable areas and
            cannot be used with the design pipeline.
          example: true
      required:
        - basePrice
        - brand
        - category
        - name
        - productId
        - productionMethod
        - supportsBackendRendering
      title: Product Template Summary
    com.fourthwall.openapi.model.ColorV1:
      type: object
      description: Color information
      properties:
        name:
          type: string
          description: Color name
          example: Navy Blue
        hex:
          type: string
          description: Color hex code
          example: "#000080"
      required:
        - hex
        - name
      title: Color
    com.fourthwall.openapi.model.CustomizableAreaV1:
      type: object
      description: Customizable area on a product
      properties:
        regionId:
          type: string
          description: Region ID used when setting regions on a customization
          example: front
        name:
          type: string
          description: Area name
          example: Front
        type:
          type: string
          description: Area type
          example: print
        available:
          type: boolean
          description: Whether this area is available for customization
          example: true
        productionMethod:
          type: string
          description: Production method for this area (e.g. DTG, EMBROIDERY, SUBLIMATION)
          example: DTG
        supportsBackendRendering:
          type: boolean
          description: Whether this specific area can be rendered by the backend rendering
            pipeline. Null when no generator region could be resolved for the
            area. Even on a product where supportsBackendRendering is true,
            individual areas may be false (e.g. embroidery areas).
          example: true
        dimensions:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.RegionDimensionsV1"
          description: Region dimensions (pixels, inches, DPI)
        placements:
          type: array
          description: Named placements (sub-regions) defined within this area, e.g.
            sticker slots on a sticker sheet. Pass a placement's id as
            `placementId` on a design-pipeline region to target a single slot,
            or set `fillAllPlacements` to fill them all with the same artwork.
            Empty when the area has no sub-placements.
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.PlacementV1"
      required:
        - available
        - name
        - placements
        - type
      title: Customizable Area
    com.fourthwall.openapi.model.PlacementV1:
      type: object
      description: A named sub-region (placement) within a customizable area
      properties:
        id:
          type: string
          description: Placement ID — pass this as `placementId` on a design-pipeline region
          example: stickerSlotOne
        name:
          type: string
          description: Human-readable placement name
          example: Sticker Slot One
      required:
        - id
        - name
      title: Placement
    com.fourthwall.openapi.model.ProductTemplateColorVariantV1:
      type: object
      description: Product variant grouped by color
      properties:
        color:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.ColorV1"
          description: Color information
        photos:
          type: array
          description: Photos for this color variant
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplatePhotoV1"
        sizeVariants:
          type: array
          description: Size variants available in this color
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplateSizeVar\
              iantV1"
        status:
          type: string
          description: Color variant status (AVAILABLE, DISCONTINUED, OUT_OF_STOCK,
            PARTIALLY_DISCONTINUED, PARTIALLY_OUT_OF_STOCK)
          example: AVAILABLE
        available:
          type: boolean
          description: Whether the color variant is available for order
          example: true
      required:
        - available
        - color
        - photos
        - sizeVariants
        - status
      title: Product Template Color Variant
    com.fourthwall.openapi.model.ProductTemplatePhotoV1:
      type: object
      description: Product photo with optional design overlay
      properties:
        url:
          type: string
          description: Photo URL
        designOverlay:
          type: string
          description: Design overlay URL for this photo
      required:
        - url
      title: Product Template Photo
    com.fourthwall.openapi.model.ProductTemplateSizeVariantV1:
      type: object
      description: Size variant within a color variant
      properties:
        variantId:
          type: string
          description: Variant ID
          example: var_abc123
        size:
          type: string
          description: Size name
          example: L
        price:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.MoneyV1"
          description: Variant price
        available:
          type: boolean
          description: Whether this size is available for order
          example: true
      required:
        - available
        - price
        - size
        - variantId
      title: Product Template Size Variant
    com.fourthwall.openapi.model.ProductTemplateV1:
      type: object
      description: Detailed product template information
      properties:
        productId:
          type: string
          description: Product template ID
          example: pro_k66ZW4fsRm6c2def3itltA
        slug:
          type: string
          description: URL slug for this product
          example: classic-t-shirt
        name:
          type: string
          description: Product name
          example: Classic T-Shirt
        description:
          type: string
          description: Product description
        category:
          type: string
          description: Product category path
          example: apparel/t-shirts
        brand:
          type: string
          description: Brand name
          example: Bella+Canvas
        productionMethod:
          type: string
          description: Production method (e.g. DTG, EMBROIDERY, DTFX, KNITTING, SUBLIMATION)
          example: DTG
        minimumOrdersNumber:
          type: integer
          format: int32
          description: Minimum orders required to produce this product, if any
          example: 10
        priceFrom:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.MoneyV1"
          description: Lowest available variant price, or null if no variants are available
        priceTo:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.MoneyV1"
          description: Highest available variant price, or null if no variants are available
        colorVariants:
          type: array
          description: Product variants grouped by color
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplateColorVa\
              riantV1"
        customizableAreas:
          type: array
          description: Customizable areas on the product
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.CustomizableAreaV1"
        sizeGuide:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.SizeGuideV1"
          description: Size guide information
        supportsBackendRendering:
          type: boolean
          description: Whether this product can be rendered by the backend rendering
            pipeline (V3 Instant Designer, excluding KNITWISE). Products where
            this is false may have null regionIds on customizable areas and
            cannot be used with the design pipeline.
          example: true
      required:
        - brand
        - category
        - colorVariants
        - customizableAreas
        - name
        - productId
        - productionMethod
        - slug
        - supportsBackendRendering
      title: Product Template
    com.fourthwall.openapi.model.RegionDimensionsV1:
      type: object
      description: Region dimensions
      properties:
        dpi:
          type: integer
          format: int32
          description: DPI (dots per inch)
          example: 300
        pixelsWidth:
          type: integer
          format: int32
          description: Width in pixels
          example: 4500
        pixelsHeight:
          type: integer
          format: int32
          description: Height in pixels
          example: 5400
        inchesWidth:
          type: number
          description: Width in inches
          example: 15
        inchesHeight:
          type: number
          description: Height in inches
          example: 18
      required:
        - dpi
        - inchesHeight
        - inchesWidth
        - pixelsHeight
        - pixelsWidth
      title: Region Dimensions
    com.fourthwall.openapi.model.SizeGuideV1:
      type: object
      description: Size guide information
      properties:
        url:
          type: string
          description: URL to the size guide page
        content:
          type: string
          description: Size guide table as HTML or markdown
      title: Size Guide
    com.fourthwall.openapi.model.ProductTemplateGroupedListV1:
      type: object
      description: Paginated list of grouped product templates
      properties:
        results:
          type: array
          description: List of grouped product template summaries
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplateGrouped\
              SummaryV1"
        total:
          type: integer
          format: int32
          description: Total number of grouped product templates matching the query
      required:
        - results
        - total
      title: Product Template Grouped List
    com.fourthwall.openapi.model.ProductTemplateGroupedSummaryV1:
      type: object
      description: Product template grouped by product family, with production method
        variants
      properties:
        productId:
          type: string
          description: Product template ID of the recommended variant
          example: pro_k66ZW4fsRm6c2def3itltA
        name:
          type: string
          description: Product name
          example: Classic T-Shirt
        category:
          type: string
          description: Product category path
          example: apparel/t-shirts
        brand:
          type: string
          description: Brand name
          example: Bella+Canvas
        thumbnail:
          type: string
          description: Thumbnail image URL
        basePrice:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.MoneyV1"
          description: Base price for the recommended variant
        variants:
          type: array
          description: Available production method variants for this product family
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ProductTemplateVariant\
              V1"
        supportsBackendRendering:
          type: boolean
          description: Whether the recommended product in this group can be rendered by
            the backend rendering pipeline (V3 Instant Designer, excluding
            KNITWISE). Individual production-method variants may differ — check
            `variants[].supportsBackendRendering`.
          example: true
      required:
        - basePrice
        - brand
        - category
        - name
        - productId
        - supportsBackendRendering
        - variants
      title: Product Template Grouped Summary
    com.fourthwall.openapi.model.ProductTemplateVariantV1:
      type: object
      description: A production method variant within a grouped product template
      properties:
        productId:
          type: string
          description: Product template ID for this variant
          example: pro_k66ZW4fsRm6c2def3itltA
        productionMethod:
          type: string
          description: Production method (e.g. DTG, EMBROIDERY, DTFX)
          example: DTG
        recommended:
          type: boolean
          description: Whether this is the recommended production method
          example: true
        basePrice:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.MoneyV1"
          description: Base price for this variant
        supportsBackendRendering:
          type: boolean
          description: Whether this variant can be rendered by the backend rendering
            pipeline (V3 Instant Designer, excluding KNITWISE).
          example: true
      required:
        - basePrice
        - productId
        - productionMethod
        - recommended
        - supportsBackendRendering
      title: Product Template Variant
    com.fourthwall.openapi.model.subscription.LimitWithUsageV1:
      type: object
      properties:
        limit:
          type: integer
          format: int64
        usage:
          type: integer
          format: int64
      required:
        - limit
        - usage
      title: Limit With Usage
    com.fourthwall.openapi.model.subscription.PendingSubscriptionV1:
      type: object
      properties:
        subscriptionId:
          type: string
        planId:
          type: string
        planName:
          type: string
      required:
        - planId
        - planName
        - subscriptionId
      title: Pending Subscription
    com.fourthwall.openapi.model.subscription.PlanSummaryV1:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        pro:
          type: boolean
        custom:
          type: boolean
      required:
        - custom
        - id
        - name
        - pro
      title: Plan Summary
    com.fourthwall.openapi.model.subscription.ProSubscriptionV1:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
        activeFrom:
          type: string
        activeTo:
          type: string
        plan:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.subscription.PlanSumma\
            ryV1"
        usage:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.subscription.Subscript\
            ionUsageV1"
        pendingSubscription:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.subscription.PendingSu\
            bscriptionV1"
      title: Pro Subscription
    com.fourthwall.openapi.model.subscription.SubscriptionUsageV1:
      type: object
      properties:
        offers:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.subscription.LimitWith\
            UsageV1"
        members:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.subscription.LimitWith\
            UsageV1"
        domains:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.subscription.LimitWith\
            UsageV1"
        digitalProductsStorageBytes:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.subscription.LimitWith\
            UsageV1"
      title: Subscription Usage
    com.fourthwall.openapi.model.Address:
      type: object
      properties:
        name:
          type: string
          example: Joe Doe
        address1:
          type: string
          example: Main Street 1
        address2:
          type: string
        city:
          type: string
          example: San Francisco
        state:
          type: string
          example: CA
        country:
          type: string
          example: US
        zip:
          type: string
          example: "12345"
        phone:
          type: string
          example: "123456789"
      required:
        - address1
        - city
        - country
        - name
        - state
      title: Address
    com.fourthwall.openapi.model.OfferAbstractV1.OfferOrderV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        name:
          type: string
          example: My t-shirt
        slug:
          type: string
          example: my-t-shirt
        description:
          type: string
          example: My t-shirt description
        primaryImage:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.Image"
        variant:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.OfferVariantWithQuantityV1"
      required:
        - description
        - id
        - name
        - slug
        - variant
      title: Offer Order
    com.fourthwall.openapi.model.OfferAbstractV1.OfferVariantAbstractV1.OfferVariantWithQuantityV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        name:
          type: string
          example: My t-shirt - Black, L
        sku:
          type: string
          example: WDEK-DRE200L
        unitPrice:
          $ref: "#/components/schemas/Money"
        unitCost:
          $ref: "#/components/schemas/Money"
        compareAtPrice:
          $ref: "#/components/schemas/Money"
        attributes:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Attributes"
        quantity:
          type: integer
          format: int32
          example: 5
        price:
          $ref: "#/components/schemas/Money"
        cost:
          $ref: "#/components/schemas/Money"
        weight:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Weight"
        dimensions:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferV\
            ariantAbstractV1.Dimensions"
      required:
        - attributes
        - dimensions
        - id
        - name
        - price
        - quantity
        - sku
        - unitPrice
        - weight
      title: Offer Variant With Quantity
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.OrderV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Order
    com.fourthwall.openapi.model.OrderV1:
      type: object
      properties:
        id:
          type: string
          example: 00aa4abd-5778-4199-8161-0b49b2f212e5
        shopId:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
        friendlyId:
          type: string
          example: D3XZFWPP
        checkoutId:
          type: string
          example: ch_BV44UYrXQA2T_Xcf1288tw
        promotionId:
          type: string
          example: prm_EdJvIXu3SEiXe_QkPavHSA
        status:
          type: string
          enum:
            - CONFIRMED
            - PARTIALLY_IN_PRODUCTION
            - IN_PRODUCTION
            - PARTIALLY_SHIPPED
            - SHIPPED
            - PARTIALLY_DELIVERED
            - DELIVERED
            - CANCELLED
            - COMPLETED
        email:
          type: string
          example: supporter@fourthwall.com
        emailMarketingOptIn:
          type: boolean
        username:
          type: string
          example: Johnny123
        message:
          type: string
          example: Sample message
        amounts:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.OrderAmounts"
        billing:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Billing"
        shipping:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Shipping"
        offers:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferO\
              rderV1"
        source:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source.Giveawa\
                yLinks"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source.Order"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source.Samples\
                Order"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source.TwitchG\
                iftRedemption"
        trackingParams:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.TrackingParams"
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Custom metadata passed during cart creation. Null for orders
            without metadata.
        createdAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
        updatedAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
      required:
        - amounts
        - checkoutId
        - createdAt
        - email
        - emailMarketingOptIn
        - friendlyId
        - id
        - message
        - offers
        - shopId
        - source
        - status
        - updatedAt
      title: Order
    com.fourthwall.openapi.model.OrderV1.Billing:
      type: object
      properties:
        address:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.Address"
      required:
        - address
      title: Billing
    com.fourthwall.openapi.model.OrderV1.GiftCard:
      type: object
      properties:
        code:
          type: string
        amountUsed:
          $ref: "#/components/schemas/Money"
      required:
        - amountUsed
        - code
      title: Gift Card
    com.fourthwall.openapi.model.OrderV1.OrderAmounts:
      type: object
      properties:
        subtotal:
          $ref: "#/components/schemas/Money"
        shipping:
          $ref: "#/components/schemas/Money"
        tax:
          $ref: "#/components/schemas/Money"
        donation:
          $ref: "#/components/schemas/Money"
        discount:
          $ref: "#/components/schemas/Money"
        giftCards:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.GiftCard"
        total:
          $ref: "#/components/schemas/Money"
      required:
        - discount
        - donation
        - giftCards
        - shipping
        - subtotal
        - tax
        - total
      title: Order Amounts
    com.fourthwall.openapi.model.OrderV1.Shipping:
      type: object
      properties:
        address:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.Address"
      required:
        - address
      title: Shipping
    com.fourthwall.openapi.model.OrderV1.Source:
      discriminator:
        propertyName: type
        mapping:
          ORDER: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source.Order"
          SAMPLES_ORDER: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Sourc\
            e.SamplesOrder"
          TWITCH_GIFT_REDEMPTION: "#/components/schemas/com.fourthwall.openapi.model.Orde\
            rV1.Source.TwitchGiftRedemption"
          GIVEAWAY_LINKS: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Sour\
            ce.GiveawayLinks"
      properties:
        type:
          type: string
      required:
        - type
      title: Source
    com.fourthwall.openapi.model.OrderV1.Source.GiveawayLinks:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source"
        - type: object
          properties:
            giftId:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
        - type: object
          properties:
            type:
              type: string
              const: GIVEAWAY_LINKS
      required:
        - giftId
      title: Giveaway Links
    com.fourthwall.openapi.model.OrderV1.Source.Order:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source"
        - type: object
          properties:
            type:
              type: string
              const: ORDER
      title: Order
    com.fourthwall.openapi.model.OrderV1.Source.SamplesOrder:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source"
        - type: object
          properties:
            type:
              type: string
              const: SAMPLES_ORDER
      title: Samples Order
    com.fourthwall.openapi.model.OrderV1.Source.TwitchGiftRedemption:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1.Source"
        - type: object
          properties:
            giftPurchaseId:
              type: string
              example: giv_EdJvIXu3SEiXe_QkPavHSA
            giftId:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
        - type: object
          properties:
            type:
              type: string
              const: TWITCH_GIFT_REDEMPTION
      required:
        - giftId
        - giftPurchaseId
      title: Twitch Gift Redemption
    com.fourthwall.openapi.model.OrderV1.TrackingParams:
      type: object
      properties:
        fbc:
          type: string
        fbp:
          type: string
        utm_source:
          type: string
        utm_medium:
          type: string
        utm_campaign:
          type: string
        utm_content:
          type: string
        utm_term:
          type: string
      title: Tracking Params
    com.fourthwall.openapi.model.MembershipTierV1:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        imageUrl:
          type: string
        variants:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipTierVariantV\
              1"
      required:
        - id
        - name
        - variants
      title: Membership Tier
    com.fourthwall.openapi.model.MembershipTierVariantV1:
      type: object
      properties:
        id:
          type: string
        tierId:
          type: string
        interval:
          type: string
          enum:
            - ANNUAL
            - MONTHLY
        amount:
          $ref: "#/components/schemas/Money"
        offerId:
          type: string
      required:
        - amount
        - id
        - interval
        - tierId
      title: Membership Tier Variant
    com.fourthwall.openapi.model.MembershipSupporterV1:
      type: object
      properties:
        id:
          type: string
        email:
          type: string
          example: supporter@fourthwall.com
        nickname:
          type: string
        createdAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
        subscription:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
                Subscription.Active"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
                Subscription.Cancelled"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
                Subscription.None"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
                Subscription.Suspended"
      required:
        - createdAt
        - email
        - id
        - nickname
        - subscription
      title: Membership Supporter
    com.fourthwall.openapi.model.MembershipSupporterV1.Subscription:
      discriminator:
        propertyName: type
        mapping:
          ACTIVE: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV\
            1.Subscription.Active"
          CANCELLED: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupport\
            erV1.Subscription.Cancelled"
          SUSPENDED: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupport\
            erV1.Subscription.Suspended"
          NONE: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
            Subscription.None"
      properties:
        type:
          type: string
      required:
        - type
      title: Subscription
    com.fourthwall.openapi.model.MembershipSupporterV1.Subscription.Active:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
            Subscription"
        - type: object
          properties:
            variant:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipTierVariantV\
                1"
        - type: object
          properties:
            type:
              type: string
              const: ACTIVE
      required:
        - variant
      title: Active
    com.fourthwall.openapi.model.MembershipSupporterV1.Subscription.Cancelled:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
            Subscription"
        - type: object
          properties:
            variant:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipTierVariantV\
                1"
        - type: object
          properties:
            type:
              type: string
              const: CANCELLED
      required:
        - variant
      title: Cancelled
    com.fourthwall.openapi.model.MembershipSupporterV1.Subscription.None:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
            Subscription"
        - type: object
          properties:
            type:
              type: string
              const: NONE
      title: None
    com.fourthwall.openapi.model.MembershipSupporterV1.Subscription.Suspended:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1.\
            Subscription"
        - type: object
          properties:
            variant:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipTierVariantV\
                1"
        - type: object
          properties:
            type:
              type: string
              const: SUSPENDED
      required:
        - variant
      title: Suspended
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.MembershipSupporterV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Membership Supporter
    com.fourthwall.openapi.model.MailingListEntryV1:
      type: object
      properties:
        id:
          type: string
          example: eml_EdJvIXu3SEiXe_QkPavHSA
        email:
          type: string
      required:
        - email
        - id
      title: Mailing List Entry
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.MailingListEntryV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.MailingListEntryV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Mailing List Entry
    com.fourthwall.openapi.model.GiveawayPackagesV1:
      type: object
      properties:
        packages:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.GiveawayPackagesV1.Giv\
              eawayPackage"
      required:
        - packages
      title: Giveaway Packages
    com.fourthwall.openapi.model.GiveawayPackagesV1.GiveawayPackage:
      type: object
      properties:
        packageId:
          type: string
          example: gpg_EdJvIXu3SEiXe_QkPavHSA
        createdAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
      required:
        - createdAt
        - packageId
      title: Giveaway Package
    com.fourthwall.openapi.model.GiftPurchaseV1:
      type: object
      properties:
        id:
          type: string
          example: giv_EdJvIXu3SEiXe_QkPavHSA
        friendlyId:
          type: string
          example: D3XZFWPP
        shopId:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
        offer:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferG\
            iftPurchaseV1"
        amounts:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Amounts"
        email:
          type: string
          example: supporter@fourthwall.com
        username:
          type: string
          example: Johnny123
        message:
          type: string
          example: Sample message
        quantity:
          type: integer
          format: int32
        gifts:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift.Av\
                  ailable"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift.Ca\
                  ncelled"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift.Ch\
                  angedToPromotion"
              - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift.Re\
                  deemed"
        createdAt:
          type: string
          format: date-time
      required:
        - amounts
        - createdAt
        - email
        - friendlyId
        - gifts
        - id
        - offer
        - quantity
        - shopId
      title: Gift Purchase
    com.fourthwall.openapi.model.GiftPurchaseV1.Amounts:
      type: object
      properties:
        subtotal:
          $ref: "#/components/schemas/Money"
        tax:
          $ref: "#/components/schemas/Money"
        total:
          $ref: "#/components/schemas/Money"
        profit:
          $ref: "#/components/schemas/Money"
        prepaidShipping:
          $ref: "#/components/schemas/Money"
      required:
        - prepaidShipping
        - profit
        - subtotal
        - tax
        - total
      title: Amounts
    com.fourthwall.openapi.model.GiftPurchaseV1.Gift:
      discriminator:
        propertyName: status
        mapping:
          REDEEMED: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gif\
            t.Redeemed"
          AVAILABLE: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gi\
            ft.Available"
          CANCELLED: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gi\
            ft.Cancelled"
          CHANGED_TO_PROMOTION: "#/components/schemas/com.fourthwall.openapi.model.GiftPu\
            rchaseV1.Gift.ChangedToPromotion"
      properties:
        status:
          type: string
      required:
        - status
      title: Gift
    com.fourthwall.openapi.model.GiftPurchaseV1.Gift.Available:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: AVAILABLE
      required:
        - id
      title: Available
    com.fourthwall.openapi.model.GiftPurchaseV1.Gift.Cancelled:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: CANCELLED
      required:
        - id
      title: Cancelled
    com.fourthwall.openapi.model.GiftPurchaseV1.Gift.ChangedToPromotion:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            promotionId:
              type: string
              example: prm_EdJvIXu3SEiXe_QkPavHSA
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: CHANGED_TO_PROMOTION
      required:
        - id
        - promotionId
        - winner
      title: Changed To Promotion
    com.fourthwall.openapi.model.GiftPurchaseV1.Gift.Redeemed:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Gift"
        - type: object
          properties:
            id:
              type: string
              example: gft_EdJvIXu3SEiXe_QkPavHSA
            orderId:
              type: string
              example: 00aa4abd-5778-4199-8161-0b49b2f212e5
            orderFriendlyId:
              type: string
              example: D3XZFWPP
            winner:
              $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1.Winner"
        - type: object
          properties:
            status:
              type: string
              const: REDEEMED
      required:
        - id
        - orderFriendlyId
        - orderId
        - winner
      title: Redeemed
    com.fourthwall.openapi.model.GiftPurchaseV1.Winner:
      type: object
      properties:
        email:
          type: string
          example: supporter@fourthwall.com
        username:
          type: string
          example: Johnny123
        selectedAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
      required:
        - selectedAt
      title: Winner
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.ExternalOrderV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.ExternalOrderV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: External Order
    com.fourthwall.openapi.model.ExternalOrderCancellationSummaryV1:
      type: object
      description: Summary of whether an external order can be cancelled
      properties:
        externalOrderId:
          type: string
          example: ETSY-123456789
        externalSource:
          type: string
          example: ETSY
        fourthwallOrderId:
          type: string
          format: uuid
          example: b1a5c9d2-3e4f-5a6b-7c8d-9e0f1a2b3c4d
        cancellable:
          type: boolean
          description: Whether the order can be cancelled (with or without forceCancel)
          example: true
        notCancellableReason:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.NotCancellableReasonV1"
          description: Reason why the order cannot be cancelled, if applicable
        fulfillments:
          type: array
          description: List of fulfillments with their cancellation status
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.FulfillmentCancellatio\
              nInfoV1"
        cancellableItemCount:
          type: integer
          format: int32
          description: Number of items in cancellable fulfillments
          example: 2
        notCancellableItemCount:
          type: integer
          format: int32
          description: Number of items in non-cancellable fulfillments
          example: 0
      required:
        - cancellable
        - cancellableItemCount
        - externalOrderId
        - externalSource
        - fourthwallOrderId
        - fulfillments
        - notCancellableItemCount
      title: External Order Cancellation Summary
    com.fourthwall.openapi.model.FulfillmentCancellationInfoV1:
      type: object
      description: Cancellation status for a single fulfillment
      properties:
        fulfillmentId:
          type: string
          example: ful_EdJvIXu3SEiXe_QkPavHSA
        status:
          type: string
          example: ACCEPTED
        cancellable:
          type: boolean
          description: Whether this fulfillment can be cancelled without forceCancel
          example: true
        cancellableWithForce:
          type: boolean
          description: Whether this fulfillment can be cancelled with forceCancel=true
          example: true
        notCancellableReason:
          type: string
          description: Reason why this fulfillment cannot be cancelled
          example: IN_PRODUCTION
        itemCount:
          type: integer
          format: int32
          description: Number of items in this fulfillment
          example: 1
        provider:
          type: string
          example: PRINTFUL
      required:
        - cancellable
        - cancellableWithForce
        - fulfillmentId
        - itemCount
        - provider
        - status
      title: Fulfillment Cancellation Info
    com.fourthwall.openapi.model.NotCancellableReasonV1:
      type: object
      description: Reason why an order cannot be cancelled
      properties:
        code:
          type: string
          example: ALL_FULFILLMENTS_IN_PRODUCTION
        message:
          type: string
          example: All fulfillments are in production. Use forceCancel=true to cancel.
      required:
        - code
        - message
      title: Not Cancellable Reason
    com.fourthwall.openapi.model.DonationV1:
      type: object
      properties:
        id:
          type: string
          example: don_Kpcjx4HIQ1e4bTIOjX9CsA
        shopId:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
        status:
          type: string
          enum:
            - OPEN
            - COMPLETED
            - ABANDONED
            - CANCELLED
            - FAILED
        email:
          type: string
          example: supporter@fourthwall.com
        username:
          type: string
          example: Johnny123
        message:
          type: string
          example: Sample message
        amounts:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.DonationV1.Amounts"
        createdAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
        updatedAt:
          type: string
          format: date-time
          example: 2020-08-13T09:05:36.939Z
      required:
        - amounts
        - createdAt
        - email
        - id
        - shopId
        - status
        - updatedAt
      title: Donation
    com.fourthwall.openapi.model.DonationV1.Amounts:
      type: object
      properties:
        total:
          $ref: "#/components/schemas/Money"
      required:
        - total
      title: Amounts
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.DonationV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.DonationV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Donation
    com.fourthwall.openapi.model.designpipeline.DesignPipelineErrorV1:
      type: object
      properties:
        step:
          type: string
        message:
          type: string
      required:
        - message
        - step
      title: Design Pipeline Error
    com.fourthwall.openapi.model.designpipeline.DesignPipelineStatusV1:
      type: object
      properties:
        pipelineId:
          type: string
        status:
          type: string
        type:
          type: string
        customizationId:
          type: string
        offerId:
          type: string
        images:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
              ipelineImageV1"
        error:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.designpipeline.DesignP\
            ipelineErrorV1"
        metadata:
          type: object
          additionalProperties:
            type: string
      required:
        - pipelineId
        - status
        - type
      title: Design Pipeline Status
    com.fourthwall.openapi.model.CollectionSlimV1:
      type: object
      properties:
        id:
          type: string
          example: col_b1EVARkUTcCTSfspQaXr1Q
        shopId:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
        name:
          type: string
          example: My collection
        slug:
          type: string
          example: my-collection
        description:
          type: string
          example: My collection description
        available:
          type: boolean
        state:
          oneOf:
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Arch\
                ived"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Hidd\
                en"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Priv\
                ate"
            - $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionStateV1.Publ\
                ic"
      required:
        - available
        - description
        - id
        - name
        - shopId
        - slug
        - state
      title: Collection Slim
    com.fourthwall.openapi.model.OpenApiPageResponseCom.fourthwall.openapi.model.CollectionSlimV1:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionSlimV1"
        total:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
      required:
        - results
      title: Collection Slim
    com.fourthwall.openapi.model.offer.RemoveProductImagesRequestV1:
      type: object
      description: Request to remove images from a product
      properties:
        imageUrls:
          type: array
          description: List of image URLs to remove
          items:
            type: string
      required:
        - imageUrls
      title: Remove Product Images Request
    com.fourthwall.app.openapi.endpoint.OpenApiDigitalProductEndpoint.RemoveDigitalFileRequestV1:
      type: object
      properties:
        fileUrl:
          type: string
      required:
        - fileUrl
      title: Remove Digital File Request
    com.fourthwall.openapi.model.OrderUpdatedV1:
      properties:
        order:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1"
        update:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdatedV1.Update"
      title: Order Updated
    com.fourthwall.openapi.model.OrderUpdatedV1.Update:
      discriminator:
        propertyName: type
        mapping:
          STATUS: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdatedV1.Updat\
            e.Status"
          SHIPPING.ADDRESS: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdat\
            edV1.Update.ShippingAddress"
          EMAIL: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdatedV1.Update\
            .Email"
      properties:
        type:
          type: string
      required:
        - type
      title: Update
    com.fourthwall.openapi.model.OrderUpdatedV1.Update.Email:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdatedV1.Update"
        - type: object
          properties:
            type:
              type: string
              const: EMAIL
      title: Email
    com.fourthwall.openapi.model.OrderUpdatedV1.Update.ShippingAddress:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdatedV1.Update"
        - type: object
          properties:
            type:
              type: string
              const: SHIPPING.ADDRESS
      title: Shipping Address
    com.fourthwall.openapi.model.OrderUpdatedV1.Update.Status:
      allOf:
        - $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdatedV1.Update"
        - type: object
          properties:
            type:
              type: string
              const: STATUS
      title: Status
    com.fourthwall.support.money.Money:
      properties:
        currency:
          type: string
          enum:
            - USD
            - EUR
            - CAD
            - GBP
            - AUD
            - NZD
            - SEK
            - NOK
            - DKK
            - PLN
            - INR
            - JPY
            - MYR
            - SGD
            - MXN
            - BRL
            - CHF
        zero:
          type: boolean
        negative:
          type: boolean
        currencyScale:
          type: integer
          format: int32
        moreThanZero:
          type: boolean
        lessThanZero:
          type: boolean
        zeroOrLess:
          type: boolean
      title: Money
    com.fourthwall.openapi.model.OfferUpdatedV1:
      properties:
        product:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.OpenApiPageResponseCom\
            .fourthwall.openapi.model.OfferAbstractV1.OfferFullV1"
      title: Offer Updated
    com.fourthwall.openapi.model.NewsletterSubscribedV1:
      properties:
        email:
          type: string
      title: Newsletter Subscribed
    com.fourthwall.openapi.model.PlatformAppDisconnectedV1:
      properties:
        appId:
          type: string
          example: apps.test_app
        shopId:
          type: string
          example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
      title: Platform App Disconnected
    com.fourthwall.openapi.model.CartAbandonedV1:
      properties:
        cartId:
          type: string
        shopId:
          type: string
        email:
          type: string
        marketingConsent:
          type: boolean
        items:
          type: array
          items:
            $ref: "#/components/schemas/com.fourthwall.openapi.model.CartAbandonedV1.CartIt\
              em"
        cartOrigin:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: string
        cartCreatedAt:
          type: string
          format: date-time
        cartUpdatedAt:
          type: string
          format: date-time
        checkout:
          $ref: "#/components/schemas/com.fourthwall.openapi.model.CartAbandonedV1.Checko\
            utContext"
      title: Cart Abandoned
    com.fourthwall.openapi.model.CartAbandonedV1.CartItem:
      properties:
        offerVariantId:
          type: string
        quantity:
          type: integer
          format: int32
      title: Cart Item
    com.fourthwall.openapi.model.CartAbandonedV1.CheckoutContext:
      properties:
        checkoutId:
          type: string
        status:
          type: string
        currentStep:
          type: string
        checkoutCreatedAt:
          type: string
          format: date-time
        checkoutUpdatedAt:
          type: string
          format: date-time
      title: Checkout Context
  securitySchemes:
    oauth:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: https://auth.staging.fourthwall.com/auth/realms/Fourthwall/protocol/openid-connect/auth
          scopes:
            donation_read: donation_read
            order_read: order_read
            order_write: order_write
            fulfillment_write: fulfillment_write
            giveaway_read: giveaway_read
            giveaway_write: giveaway_write
            memberships_read: memberships_read
            memberships_write: memberships_write
            promotions_write: promotions_write
            promotions_read: promotions_read
            offer_read: offer_read
            offer_write: offer_write
            shop_read: shop_read
            thankyou_read: thankyou_read
            thankyou_write: thankyou_write
            webhook_read: webhook_read
            webhook_write: webhook_write
            media_read: media_read
            media_write: media_write
            analytics_read: analytics_read
            samples_read: samples_read
            samples_write: samples_write
            dns_read: dns_read
            dns_write: dns_write
            settings_read: settings_read
            payout_read: payout_read
            integrations_read: integrations_read
    basicAuth:
      type: http
      scheme: basic
webhooks:
  order.placed:
    post:
      tags:
        - Order Events
      summary: Order Placed
      description: Fired when a new order is successfully placed and paid.
      operationId: webhook-order-placed
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: ORDER_PLACED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  order.updated:
    post:
      tags:
        - Order Events
      summary: Order Updated
      description: Fired when an order's status, shipping address, or email is updated.
      operationId: webhook-order-updated
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: ORDER_UPDATED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.OrderUpdatedV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  gift.purchase:
    post:
      tags:
        - Order Events
      summary: Gift Purchase
      description: Fired when a gift card is purchased.
      operationId: webhook-gift-purchase
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: GIFT_PURCHASE
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftPurchaseV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  product.created:
    post:
      tags:
        - Product Events
      summary: Product Created
      description: Fired when a new product is created.
      operationId: webhook-product-created
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: PRODUCT_CREATED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferAbstractV1.OfferF\
                    ullV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  product.updated:
    post:
      tags:
        - Product Events
      summary: Product Updated
      description: Fired when a product is updated.
      operationId: webhook-product-updated
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: PRODUCT_UPDATED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.OfferUpdatedV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  donation:
    post:
      tags:
        - Order Events
      summary: Donation
      description: Fired when a new donation is received.
      operationId: webhook-donation
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: DONATION
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.DonationV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  subscription.purchased:
    post:
      tags:
        - Membership Events
      summary: Subscription Purchased
      description: Fired when a new membership subscription is purchased.
      operationId: webhook-subscription-purchased
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: SUBSCRIPTION_PURCHASED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  subscription.expired:
    post:
      tags:
        - Membership Events
      summary: Subscription Expired
      description: Fired when a membership subscription expires.
      operationId: webhook-subscription-expired
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: SUBSCRIPTION_EXPIRED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  subscription.changed:
    post:
      tags:
        - Membership Events
      summary: Subscription Changed
      description: Fired when a membership subscription is changed (e.g., tier change).
      operationId: webhook-subscription-changed
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: SUBSCRIPTION_CHANGED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.MembershipSupporterV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  newsletter.subscribed:
    post:
      tags:
        - Newsletter Events
      summary: Newsletter Subscribed
      description: Fired when someone subscribes to the newsletter.
      operationId: webhook-newsletter-subscribed
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: NEWSLETTER_SUBSCRIBED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.NewsletterSubscribedV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  thank.you.sent:
    post:
      tags:
        - Thank You Events
      summary: Thank You Sent
      description: Fired when a thank you message is sent to a supporter.
      operationId: webhook-thank-you-sent
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: THANK_YOU_SENT
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.ThankYouV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  gift.draw.started:
    post:
      tags:
        - Giveaway Events
      summary: Gift Draw Started
      description: Fired when a giveaway draw is started.
      operationId: webhook-gift-draw-started
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: GIFT_DRAW_STARTED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  gift.draw.ended:
    post:
      tags:
        - Giveaway Events
      summary: Gift Draw Ended
      description: Fired when a giveaway draw ends.
      operationId: webhook-gift-draw-ended
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: GIFT_DRAW_ENDED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.GiftDraftV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  promotion.created:
    post:
      tags:
        - Promotion Events
      summary: Promotion Created
      description: Fired when a new promotion is created.
      operationId: webhook-promotion-created
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: PROMOTION_CREATED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  promotion.updated:
    post:
      tags:
        - Promotion Events
      summary: Promotion Updated
      description: Fired when a promotion is updated.
      operationId: webhook-promotion-updated
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: PROMOTION_UPDATED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  promotion.status.changed:
    post:
      tags:
        - Promotion Events
      summary: Promotion Status Changed
      description: Fired when a promotion's status changes (e.g., activated, expired).
      operationId: webhook-promotion-status-changed
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: PROMOTION_STATUS_CHANGED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.promotions.PromotionV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  platform.app.disconnected:
    post:
      tags:
        - Platform Events
      summary: Platform App Disconnected
      description: Fired when a platform app is disconnected from a shop.
      operationId: webhook-platform-app-disconnected
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: PLATFORM_APP_DISCONNECTED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.PlatformAppDisconnecte\
                    dV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  collection.updated:
    post:
      tags:
        - Collection Events
      summary: Collection Updated
      description: Fired when a collection is updated.
      operationId: webhook-collection-updated
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: COLLECTION_UPDATED
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.CollectionV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  cart.abandoned.1h:
    post:
      tags:
        - Cart Events
      summary: Cart Abandoned (1 Hour)
      description: Fired when a cart has been inactive for 1 hour.
      operationId: webhook-cart-abandoned-1h
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: CART_ABANDONED_1H
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.CartAbandonedV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  cart.abandoned.24h:
    post:
      tags:
        - Cart Events
      summary: Cart Abandoned (24 Hours)
      description: Fired when a cart has been inactive for 24 hours.
      operationId: webhook-cart-abandoned-24h
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: CART_ABANDONED_24H
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.CartAbandonedV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
  cart.abandoned.72h:
    post:
      tags:
        - Cart Events
      summary: Cart Abandoned (72 Hours)
      description: Fired when a cart has been inactive for 72 hours. This is the final
        abandonment signal.
      operationId: webhook-cart-abandoned-72h
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: Unique identifier for this webhook event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                webhookId:
                  type: string
                  description: ID of the webhook configuration that triggered this event
                  example: 00aa4abd-5778-4199-8161-0b49b2f212e5
                shopId:
                  type: string
                  description: ID of the shop that generated this event
                  example: sh_c689d374-22ca-43d3-8d29-9ef0805cc4cb
                type:
                  type: string
                  description: The event type
                  example: CART_ABANDONED_72H
                apiVersion:
                  type: string
                  description: API version of the webhook payload
                  example: V1
                createdAt:
                  type: string
                  format: date-time
                  description: When this event was created
                  example: 2020-08-13T09:05:36.939+00:00
                testMode:
                  description: Whether this event was sent in test mode
                  example: false
                data:
                  $ref: "#/components/schemas/com.fourthwall.openapi.model.CartAbandonedV1"
              required:
                - apiVersion
                - createdAt
                - data
                - id
                - shopId
                - testMode
                - type
                - webhookId
        required: true
      responses:
        "200":
          description: Event received successfully
