{
  "openapi": "3.1.1",
  "info": {
    "title": "ReceiptRoller Retail Media API",
    "description": "Retail Media API for integrating purchase, advertising, CRM, and AI.",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://receiptroller.io/"
    }
  ],
  "paths": {
    "/api/v1/webhooks/shopify/inventory": {
      "post": {
        "tags": [
          "ShopifyWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/webhooks/shopify/app-uninstalled": {
      "post": {
        "tags": [
          "ShopifyWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/webhooks/shopify/customers-data-request": {
      "post": {
        "tags": [
          "ShopifyWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/webhooks/shopify/customers-redact": {
      "post": {
        "tags": [
          "ShopifyWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/webhooks/shopify/shop-redact": {
      "post": {
        "tags": [
          "ShopifyWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/webhooks/shopify/orders": {
      "post": {
        "tags": [
          "ShopifyWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/tokens/register": {
      "post": {
        "tags": [
          "NotificationTokenApi"
        ],
        "summary": "Register or refresh a push token for a (customer, channel, device)\ntriple. Idempotent — calling twice with the same triple updates\nthe token and bumps LastSeenAt.",
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterTokenRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterTokenRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Registered.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterTokenResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterTokenResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed."
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/tokens/unregister": {
      "post": {
        "tags": [
          "NotificationTokenApi"
        ],
        "summary": "Stop sending to this token (user explicitly opted out from the device).",
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnregisterTokenRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UnregisterTokenRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UnregisterTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Unregistered."
          }
        }
      }
    },
    "/api/v1/public/stores": {
      "get": {
        "tags": [
          "PublicStoreDirectory"
        ],
        "summary": "GET /api/v1/public/stores\nPublic store search — equivalent to the /explore page.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "prefecture",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Search results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/PublicStoreListResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicStoreListResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicStoreListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/public/stores/{storeId}": {
      "get": {
        "tags": [
          "PublicStoreDirectory"
        ],
        "summary": "GET /api/v1/public/stores/{storeId}\nPublic store detail — only returns stores with IsPublicListing=true or a Google Place ID.",
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Store detail.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/PublicStoreDetail"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicStoreDetail"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicStoreDetail"
                }
              }
            }
          },
          "404": {
            "description": "Store not found or not publicly listed."
          }
        }
      }
    },
    "/api/v1/terminals/{publicTerminalId}/qr.png": {
      "get": {
        "tags": [
          "QrImageApi"
        ],
        "parameters": [
          {
            "name": "publicTerminalId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 16,
              "minLength": 6,
              "type": "string"
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/terminals/{publicTerminalId}/qr.pdf": {
      "get": {
        "tags": [
          "QrImageApi"
        ],
        "parameters": [
          {
            "name": "publicTerminalId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 16,
              "minLength": 6,
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/claim-tokens/{claimToken}/qr.png": {
      "get": {
        "tags": [
          "QrImageApi"
        ],
        "parameters": [
          {
            "name": "claimToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/claim-tokens/{claimToken}/qr.pdf": {
      "get": {
        "tags": [
          "QrImageApi"
        ],
        "parameters": [
          {
            "name": "claimToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/manifest": {
      "get": {
        "tags": [
          "StoreAppApi"
        ],
        "summary": "App manifest — everything a client needs to render the shell:\napp identity (name, logo, theme), the resolved template + theme +\nnavigation, and the platform identifiers for LINE / iOS / Android.",
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Manifest.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AppManifestResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppManifestResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppManifestResponse"
                }
              }
            }
          },
          "404": {
            "description": "No app found for this shopId."
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/pages": {
      "get": {
        "tags": [
          "StoreAppApi"
        ],
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Pages.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AppPageListResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppPageListResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppPageListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/pages/{slug}": {
      "get": {
        "tags": [
          "StoreAppApi"
        ],
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Page detail.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AppPageDetail"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppPageDetail"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppPageDetail"
                }
              }
            }
          },
          "404": {
            "description": "Page not found or not published."
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/posts": {
      "get": {
        "tags": [
          "StoreAppApi"
        ],
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "Published"
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Posts.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AppPostListResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppPostListResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppPostListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/business-info": {
      "get": {
        "tags": [
          "StoreAppApi"
        ],
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "specialDaysAhead",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Business info.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessInfoResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessInfoResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessInfoResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/membership-card-config": {
      "get": {
        "tags": [
          "StoreAppApi"
        ],
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Card config.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MembershipCardConfigDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MembershipCardConfigDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MembershipCardConfigDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/terminals/{publicTerminalId}/last-receipt": {
      "get": {
        "tags": [
          "TerminalReceiptApi"
        ],
        "summary": "Returns the latest claimable receipt for a terminal.\n\n404 — terminal unknown, no transaction yet, outside TTL, or already\n      fully claimed with AllowMultipleClaims=false.\n429 — rate-limited.\n200 — receipt + signed claim token.",
        "parameters": [
          {
            "name": "publicTerminalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Receipt + claim token",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/LastReceiptResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LastReceiptResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/LastReceiptResponse"
                }
              }
            }
          },
          "404": {
            "description": "No claimable receipt (unknown terminal, expired, or already claimed)."
          },
          "429": {
            "description": "Rate limit exceeded."
          }
        }
      }
    },
    "/api/v1/terminals/{publicTerminalId}/claim": {
      "post": {
        "tags": [
          "TerminalReceiptApi"
        ],
        "summary": "Records the customer's claim on the latest receipt. Requires the\nclaim token returned by `last-receipt`. Channel identifies which\nsurface the customer came in through (line/ios/android/email/web).",
        "parameters": [
          {
            "name": "publicTerminalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/ClaimRequest"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/ClaimRequest"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/ClaimRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Claim recorded",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request body."
          },
          "401": {
            "description": "Claim token missing, malformed, or expired."
          },
          "404": {
            "description": "Terminal or transaction no longer claimable."
          },
          "409": {
            "description": "Transaction already claimed."
          },
          "429": {
            "description": "Rate limit exceeded."
          }
        }
      }
    },
    "/api/v1/rx/{claimToken}": {
      "get": {
        "tags": [
          "TransactionReceiptApi"
        ],
        "summary": "Returns the receipt bound to a transaction-QR token.\n\n404 — unknown / expired / claimed / revoked token, or the underlying\n      transaction has been deleted.\n429 — rate-limited.\n200 — receipt payload.",
        "parameters": [
          {
            "name": "claimToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Receipt",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionQrReceiptResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionQrReceiptResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionQrReceiptResponse"
                }
              }
            }
          },
          "404": {
            "description": "Unknown / expired / claimed / revoked token."
          },
          "429": {
            "description": "Rate limit exceeded."
          }
        }
      }
    },
    "/api/v1/rx/{claimToken}/claim": {
      "post": {
        "tags": [
          "TransactionReceiptApi"
        ],
        "summary": "Marks the token Claimed and writes an audit row. Single-use — a\nsecond POST with the same token returns 409, matching the semantics\nthe customer expects (\"this QR was already used\").",
        "parameters": [
          {
            "name": "claimToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/TransactionQrClaimRequest"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/TransactionQrClaimRequest"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/TransactionQrClaimRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Claim recorded",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionQrClaimResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionQrClaimResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionQrClaimResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request body."
          },
          "404": {
            "description": "Token unknown / expired / already claimed / revoked."
          },
          "409": {
            "description": "Token already claimed."
          },
          "429": {
            "description": "Rate limit exceeded."
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/wallet/apple/{customerId}": {
      "get": {
        "tags": [
          "WalletPassApi"
        ],
        "summary": "Issues an Apple Wallet pass for the customer. Returns the\nsigned .pkpass bytes; the iOS Wallet app opens the file\ndirectly when its MIME type matches.",
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Pass bytes.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              }
            }
          },
          "404": {
            "description": "Customer not found."
          },
          "503": {
            "description": "Apple Wallet not configured on this environment."
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/wallet/google/{customerId}": {
      "get": {
        "tags": [
          "WalletPassApi"
        ],
        "summary": "Issues a Google Wallet save URL. The client navigates to the\nURL (or hands it to the host's IDeepLinkRouter) to open Google\nWallet's \"Save\" UI.",
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Save URL.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GoogleSaveResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoogleSaveResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoogleSaveResponse"
                }
              }
            }
          },
          "404": {
            "description": "Customer not found."
          },
          "503": {
            "description": "Google Wallet not configured on this environment."
          }
        }
      }
    },
    "/api/v1/apps/{shopId}/wallet/push/{customerId}": {
      "post": {
        "tags": [
          "WalletPassApi"
        ],
        "summary": "Manually triggers a rank/points re-push to the customer's\nexisting passes. Used by the campaign worker after a points\nadjustment so the Wallet pass shows fresh data without the\nuser re-launching the app.",
        "parameters": [
          {
            "name": "shopId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Update count.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WalletPushResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletPushResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletPushResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/checkins": {
      "post": {
        "tags": [
          "CheckInApi"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCheckInRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCheckInRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCheckInRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Recorded or rejected with reason (see `status`).",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CheckInResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckInResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckInResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing token."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/checkins/campaign/{token}": {
      "get": {
        "tags": [
          "CheckInApi"
        ],
        "summary": "Lightweight pre-check so the app can render campaign name /\ndescription on the check-in screen BEFORE committing the POST.\nDoes not record anything. Falls back to `unknown_token` on\nmiss so the client shows a helpful error rather than a blank\nscreen.",
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign found or status indicates why not.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CheckInCampaignPreviewResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckInCampaignPreviewResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckInCampaignPreviewResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/checkins/me": {
      "get": {
        "tags": [
          "CheckInApi"
        ],
        "summary": "The caller's own check-in history, newest first. Resolves store +\ncampaign names in a single pass so the client can render a flat\nlist without follow-up requests.\n\nPage size capped at 200 — this is a personal history, not a\nbulk-export feed. Cursor pagination is a follow-up if anyone\nactually accumulates that many visits on one device.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of check-ins.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserCheckInListResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserCheckInListResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserCheckInListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/surveys/campaign/{token}": {
      "get": {
        "tags": [
          "SurveyApi"
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign found, with questions inlined.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SurveyCampaignPreviewResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SurveyCampaignPreviewResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SurveyCampaignPreviewResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/surveys/responses": {
      "post": {
        "tags": [
          "SurveyApi"
        ],
        "summary": "Submit a response. Bearer-authenticated callers attach their\nuserId; anonymous callers must send a stable `deviceId` and\nthe campaign must opt into `IsAnonymous` — otherwise we\nreturn `auth_required` and the client routes the user\nthrough sign-in.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitSurveyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitSurveyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitSurveyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Recorded or rejected with reason (see `status`).",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SurveySubmitResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SurveySubmitResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SurveySubmitResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing token or no answers."
          }
        }
      }
    },
    "/api/v1/surveys/me": {
      "get": {
        "tags": [
          "SurveyApi"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of responses.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserSurveyListResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSurveyListResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSurveyListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/account": {
      "delete": {
        "tags": [
          "UserAccount"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteAccountRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteAccountRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Account deleted.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionResponse"
                }
              }
            }
          },
          "400": {
            "description": "confirm flag missing, or password missing / wrong for registered accounts."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/password": {
      "put": {
        "tags": [
          "UserAccount"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePasswordRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePasswordRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Password changed.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/PasswordChangedResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PasswordChangedResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/PasswordChangedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Anonymous account, wrong current password, or new password fails policy."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/budget": {
      "get": {
        "tags": [
          "UserBudget"
        ],
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the effective budget.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      },
      "put": {
        "tags": [
          "UserBudget"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Budget saved.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid year, month, or amount."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      }
    },
    "/api/v1/user/coupons": {
      "get": {
        "tags": [
          "UserCoupons"
        ],
        "responses": {
          "200": {
            "description": "Returns a list of coupons.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserCouponItem"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserCouponItem"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserCouponItem"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      }
    },
    "/api/v1/user/coupons/{storeId}/{couponId}": {
      "get": {
        "tags": [
          "UserCoupons"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "couponId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the coupon.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserCouponItem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserCouponItem"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserCouponItem"
                }
              }
            }
          },
          "404": {
            "description": "Coupon not found."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/devices": {
      "post": {
        "tags": [
          "UserDevices"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterDeviceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterDeviceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterDeviceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Registered (existing row).",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserDeviceResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDeviceResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDeviceResponse"
                }
              }
            }
          },
          "201": {
            "description": "Registered (new row).",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserDeviceResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDeviceResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDeviceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid fields."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/devices/{deviceId}": {
      "delete": {
        "tags": [
          "UserDevices"
        ],
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Unregistered."
          },
          "404": {
            "description": "Device not found."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/favorites": {
      "get": {
        "tags": [
          "UserFavoriteStores"
        ],
        "responses": {
          "200": {
            "description": "Returns a list of favorite stores with embedded snapshot.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FavoriteStoreWithSnapshot"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FavoriteStoreWithSnapshot"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FavoriteStoreWithSnapshot"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      }
    },
    "/api/v1/user/favorites/{storeId}": {
      "get": {
        "tags": [
          "UserFavoriteStores"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns favorite status.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FavoriteStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FavoriteStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FavoriteStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      },
      "post": {
        "tags": [
          "UserFavoriteStores"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Store added to favorites.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FavoriteStoreDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FavoriteStoreDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FavoriteStoreDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      },
      "delete": {
        "tags": [
          "UserFavoriteStores"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Store removed from favorites."
          },
          "404": {
            "description": "Store was not in favorites."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/flyers": {
      "get": {
        "tags": [
          "UserFlyers"
        ],
        "parameters": [
          {
            "name": "active",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of flyers.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlyerListItem"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlyerListItem"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlyerListItem"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      }
    },
    "/api/v1/user/flyers/{flyerId}": {
      "get": {
        "tags": [
          "UserFlyers"
        ],
        "parameters": [
          {
            "name": "flyerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Flyer detail.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerDetailResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerDetailResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerDetailResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found or not in the user's favorites."
          },
          "401": {
            "description": "Unauthorized."
          }
        }
      }
    },
    "/api/v1/user/income": {
      "get": {
        "tags": [
          "UserIncome"
        ],
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Effective income.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/IncomeResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomeResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomeResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      },
      "put": {
        "tags": [
          "UserIncome"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IncomeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/IncomeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/IncomeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Income saved.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/IncomeResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomeResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid year, month, or amount."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      }
    },
    "/api/v1/user/receipts": {
      "get": {
        "tags": [
          "UserReceipts"
        ],
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of receipts.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptListItem"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptListItem"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptListItem"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      },
      "post": {
        "tags": [
          "UserReceipts"
        ],
        "requestBody": {
          "description": "Directory StoreId the client picked from the analyze\nresponse's linkedStore candidates. Null / empty = unlinked.",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "allOf": [
                  {
                    "type": "object",
                    "properties": {
                      "Id": {
                        "type": "string"
                      },
                      "StoreName": {
                        "type": "string"
                      },
                      "TotalAmount": {
                        "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
                        "type": [
                          "number",
                          "string"
                        ],
                        "format": "double"
                      },
                      "TaxAmount": {
                        "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
                        "type": [
                          "number",
                          "string"
                        ],
                        "format": "double"
                      },
                      "PaymentMethod": {
                        "type": "string"
                      },
                      "TaxRegistrationNumber": {
                        "type": "string"
                      },
                      "ReceiptDate": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "Category": {
                        "type": "string"
                      },
                      "Notes": {
                        "type": "string"
                      },
                      "StorePhone": {
                        "type": "string"
                      },
                      "StoreAddress": {
                        "type": "string"
                      },
                      "Items": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/ReceiptItemDto"
                        }
                      },
                      "LinkedStoreId": {
                        "type": "string"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "properties": {
                      "image": {
                        "$ref": "#/components/schemas/IFormFile"
                      }
                    }
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Receipt saved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              }
            }
          },
          "409": {
            "description": "Duplicate receipt detected."
          }
        }
      }
    },
    "/api/v1/user/receipts/{id}": {
      "get": {
        "tags": [
          "UserReceipts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the receipt.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              }
            }
          },
          "404": {
            "description": "Receipt not found."
          }
        }
      },
      "delete": {
        "tags": [
          "UserReceipts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Receipt deleted."
          },
          "404": {
            "description": "Receipt not found."
          }
        }
      }
    },
    "/api/v1/user/receipts/summary": {
      "get": {
        "tags": [
          "UserReceipts"
        ],
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the spending summary.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MonthlySpendingSummary"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonthlySpendingSummary"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonthlySpendingSummary"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/user/receipts/analyze": {
      "post": {
        "tags": [
          "UserReceipts"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns extracted receipt data.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptDto"
                }
              }
            }
          },
          "400": {
            "description": "No image file provided."
          }
        }
      }
    },
    "/api/v1/user/scan/analyze": {
      "post": {
        "tags": [
          "UserScan"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Classification + extraction result.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ScanAnalyzeResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanAnalyzeResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanAnalyzeResult"
                }
              }
            }
          },
          "400": {
            "description": "No image / bad mime."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          },
          "503": {
            "description": "AI extractor unavailable."
          }
        }
      }
    },
    "/api/v1/user/statements/analyze": {
      "post": {
        "tags": [
          "UserStatements"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "allOf": [
                  {
                    "type": "object",
                    "properties": {
                      "file": {
                        "$ref": "#/components/schemas/IFormFile"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "properties": {
                      "sourceHint": {
                        "type": "string"
                      }
                    }
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Extracted statement.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/StatementAnalysisDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatementAnalysisDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatementAnalysisDto"
                }
              }
            }
          },
          "400": {
            "description": "No image / bad mime."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          },
          "503": {
            "description": "AI extractor unavailable."
          }
        }
      }
    },
    "/api/v1/user/statements/import": {
      "post": {
        "tags": [
          "UserStatements"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatementImportRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/StatementImportRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/StatementImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Per-row import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/StatementImportResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatementImportResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatementImportResult"
                }
              }
            }
          },
          "400": {
            "description": "No transactions / too many transactions."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      }
    },
    "/api/v1/store/aiforecast/sales": {
      "post": {
        "tags": [
          "AIForecast"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesForecastRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesForecastRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesForecastRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Sales forecast generated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SalesForecastResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesForecastResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesForecastResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/aiforecast/demand": {
      "post": {
        "tags": [
          "AIForecast"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DemandForecastRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DemandForecastRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DemandForecastRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Demand forecast completed.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DemandForecastResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemandForecastResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemandForecastResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/aiforecast/churn": {
      "post": {
        "tags": [
          "AIForecast"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChurnPredictionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChurnPredictionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChurnPredictionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Churn risk scores returned.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChurnPredictionResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChurnPredictionResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChurnPredictionResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/aiforecast/recommendations": {
      "post": {
        "tags": [
          "AIForecast"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecommendationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RecommendationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RecommendationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Recommendations generated.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/RecommendationResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecommendationResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecommendationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/stores/{storeId}/business-hours": {
      "get": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BusinessHoursDto"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BusinessHoursDto"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BusinessHoursDto"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/stores/{storeId}/business-hours/{dayOfWeek}/{shiftIndex}": {
      "put": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dayOfWeek",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "shiftIndex",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessHoursDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessHoursDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessHoursDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dayOfWeek",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "shiftIndex",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/stores/{storeId}/business-hours/work-hours-limit": {
      "get": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Work-hours limits."
          },
          "404": {
            "description": "Store not found in this business account."
          }
        }
      },
      "put": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkHoursLimitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkHoursLimitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkHoursLimitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated limits."
          },
          "400": {
            "description": "Invalid time format or start ≥ end."
          },
          "404": {
            "description": "Store not found in this business account."
          }
        }
      }
    },
    "/api/v1/stores/{storeId}/business-hours/special-days": {
      "get": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/stores/{storeId}/business-hours/special-days/{date}": {
      "put": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpecialBusinessDayDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SpecialBusinessDayDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SpecialBusinessDayDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/stores/{storeId}/business-hours/open-status": {
      "get": {
        "tags": [
          "BusinessHoursApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "at",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/store/chat/sessions/{id}": {
      "get": {
        "tags": [
          "ChatSupport"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Session details retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ChatSessionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatSessionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatSessionResponse"
                }
              }
            }
          },
          "404": {
            "description": "Session not found."
          }
        }
      }
    },
    "/api/v1/store/chat/sessions/search": {
      "get": {
        "tags": [
          "ChatSupport"
        ],
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of sessions retrieved.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChatSessionSummary"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChatSessionSummary"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChatSessionSummary"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/chat/sessions": {
      "post": {
        "tags": [
          "ChatSupport"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatSessionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatSessionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChatSessionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Session created successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ChatSessionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatSessionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatSessionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/chat/sessions/{id}/message": {
      "post": {
        "tags": [
          "ChatSupport"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatMessageRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatMessageRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChatMessageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Message sent successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ChatMessageResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatMessageResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatMessageResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/chat/sessions/{id}/messages": {
      "get": {
        "tags": [
          "ChatSupport"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Chat history retrieved.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChatMessage"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChatMessage"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChatMessage"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/chat/sessions/{id}/close": {
      "post": {
        "tags": [
          "ChatSupport"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Session closed successfully."
          },
          "404": {
            "description": "Session not found."
          }
        }
      }
    },
    "/api/v1/store/couponcampaigns/{id}": {
      "get": {
        "tags": [
          "CouponCampaigns"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coupon campaign found.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponCampaignResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponCampaignResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponCampaignResponse"
                }
              }
            }
          },
          "404": {
            "description": "Coupon campaign not found."
          }
        }
      },
      "delete": {
        "tags": [
          "CouponCampaigns"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted successfully."
          }
        }
      }
    },
    "/api/v1/store/couponcampaigns/search": {
      "get": {
        "tags": [
          "CouponCampaigns"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of coupon campaigns.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CouponCampaignResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CouponCampaignResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CouponCampaignResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/couponcampaigns": {
      "post": {
        "tags": [
          "CouponCampaigns"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponCampaignRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponCampaignRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CouponCampaignRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Coupon campaign created or updated.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponCampaignResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponCampaignResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponCampaignResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/coupongroups/{id}": {
      "get": {
        "tags": [
          "CouponGroups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coupon group found.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponGroupResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "CouponGroups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/store/coupongroups/search": {
      "get": {
        "tags": [
          "CouponGroups"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/store/coupongroups": {
      "post": {
        "tags": [
          "CouponGroups"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponGroupRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponGroupRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CouponGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Coupon group created or updated.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponGroupResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/couponredemptions/verify": {
      "post": {
        "tags": [
          "CouponRedemptions"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponVerificationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponVerificationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CouponVerificationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Coupon is valid.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponVerificationResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponVerificationResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponVerificationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid coupon or request."
          },
          "404": {
            "description": "Coupon not found."
          }
        }
      }
    },
    "/api/v1/store/couponredemptions/redeem": {
      "post": {
        "tags": [
          "CouponRedemptions"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponRedemptionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponRedemptionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CouponRedemptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Coupon redeemed successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemptionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or already redeemed coupon."
          }
        }
      }
    },
    "/api/v1/store/couponredemptions/redemptions/{id}": {
      "get": {
        "tags": [
          "CouponRedemptions"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Redemption found.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemptionResponse"
                }
              }
            }
          },
          "404": {
            "description": "Redemption not found."
          }
        }
      }
    },
    "/api/v1/store/coupons/{id}": {
      "get": {
        "tags": [
          "Coupons"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coupon retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Coupons"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted successfully."
          }
        }
      }
    },
    "/api/v1/store/coupons": {
      "post": {
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CouponRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Coupon created or updated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CouponResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/customers/{id}": {
      "get": {
        "tags": [
          "Customers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Customer profile retrieved.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          },
          "404": {
            "description": "Customer not found."
          }
        }
      },
      "delete": {
        "tags": [
          "Customers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Customer deleted."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          },
          "404": {
            "description": "Customer not found."
          }
        }
      }
    },
    "/api/v1/store/customers": {
      "get": {
        "tags": [
          "Customers"
        ],
        "parameters": [
          {
            "name": "loyaltyRank",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minSpend",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "type": [
                "number",
                "string"
              ],
              "format": "double"
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Customer list returned.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      },
      "post": {
        "tags": [
          "Customers"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Customer created or updated.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          }
        }
      }
    },
    "/api/v1/store/customers/{id}/purchases": {
      "get": {
        "tags": [
          "Customers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of receipts returned.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerPurchaseResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerPurchaseResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerPurchaseResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Missing required scope."
          },
          "404": {
            "description": "Customer not found."
          }
        }
      }
    },
    "/api/v1/displays/pair": {
      "post": {
        "tags": [
          "DisplaysApi"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PairRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PairRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PairRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/displays/{displayId}/heartbeat": {
      "post": {
        "tags": [
          "DisplaysApi"
        ],
        "parameters": [
          {
            "name": "displayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/displays/{displayId}/playlist": {
      "get": {
        "tags": [
          "DisplaysApi"
        ],
        "parameters": [
          {
            "name": "displayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/displays/{displayId}/impressions": {
      "post": {
        "tags": [
          "DisplaysApi"
        ],
        "parameters": [
          {
            "name": "displayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImpressionBatchRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ImpressionBatchRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ImpressionBatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/store/ecommerce/channels": {
      "get": {
        "tags": [
          "EcommerceChannels"
        ],
        "responses": {
          "200": {
            "description": "List retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChannelResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChannelResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChannelResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "EcommerceChannels"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChannelRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChannelRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChannelRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Channel registered successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid channel configuration."
          }
        }
      }
    },
    "/api/v1/store/ecommerce/channels/{id}": {
      "get": {
        "tags": [
          "EcommerceChannels"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Channel found.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelResponse"
                }
              }
            }
          },
          "404": {
            "description": "Channel not found."
          }
        }
      },
      "delete": {
        "tags": [
          "EcommerceChannels"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Channel disconnected successfully."
          }
        }
      }
    },
    "/api/v1/store/ecommerce/channels/{id}/sync": {
      "patch": {
        "tags": [
          "EcommerceChannels"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sync started successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SyncResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyncResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyncResponse"
                }
              }
            }
          },
          "404": {
            "description": "Channel not found."
          }
        }
      }
    },
    "/api/v1/store/ecommerce/channels/{id}/toggle": {
      "patch": {
        "tags": [
          "EcommerceChannels"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleSyncRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleSyncRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleSyncRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Sync status toggled successfully."
          },
          "404": {
            "description": "Channel not found."
          }
        }
      }
    },
    "/api/v1/store/ecommerce/products/{id}": {
      "get": {
        "tags": [
          "EcommerceProducts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Product found.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/EcommerceProductResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EcommerceProductResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/EcommerceProductResponse"
                }
              }
            }
          },
          "404": {
            "description": "Product not found."
          }
        }
      },
      "delete": {
        "tags": [
          "EcommerceProducts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Product deleted successfully."
          }
        }
      }
    },
    "/api/v1/store/ecommerce/products/search": {
      "get": {
        "tags": [
          "EcommerceProducts"
        ],
        "parameters": [
          {
            "name": "keyword",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channel",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Search completed successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EcommerceProductResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EcommerceProductResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EcommerceProductResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/ecommerce/products": {
      "post": {
        "tags": [
          "EcommerceProducts"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EcommerceProductRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EcommerceProductRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EcommerceProductRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Product created or updated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/EcommerceProductResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EcommerceProductResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/EcommerceProductResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/inventory": {
      "get": {
        "tags": [
          "InventoryApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "productId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lowStock",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of stock rows."
          },
          "403": {
            "description": "Missing scope or not a member of the business account."
          }
        }
      }
    },
    "/api/v1/inventory/{locationId}/{productId}": {
      "get": {
        "tags": [
          "InventoryApi"
        ],
        "parameters": [
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Stock row."
          },
          "404": {
            "description": "No stock record for this location + product."
          }
        }
      }
    },
    "/api/v1/inventory/locations": {
      "get": {
        "tags": [
          "InventoryApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of locations."
          }
        }
      }
    },
    "/api/v1/inventory/adjust": {
      "post": {
        "tags": [
          "InventoryApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdjustRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdjustRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdjustRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Adjusted; returns the updated row."
          },
          "400": {
            "description": "Missing fields or zero quantityChange."
          },
          "404": {
            "description": "No stock record for this location + product."
          }
        }
      }
    },
    "/api/v1/inventory/movements": {
      "get": {
        "tags": [
          "InventoryApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "productId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of movements."
          }
        }
      }
    },
    "/api/sns/line/webhook/{organizationId}/{accountId}": {
      "post": {
        "tags": [
          "LineWebhook"
        ],
        "summary": "LINE webhook endpoint. LINE sends POST with JSON body and X-Line-Signature header.\nPOST /api/sns/line/webhook/{organizationId}/{accountId}",
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/store/ocr/receipt": {
      "post": {
        "tags": [
          "Ocr"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OCR result returned successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptOcrResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptOcrResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptOcrResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/ocr/shelf": {
      "post": {
        "tags": [
          "Ocr"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Shelf analysis completed.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfAnalysisResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfAnalysisResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfAnalysisResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/ocr/classify": {
      "post": {
        "tags": [
          "Ocr"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Classification result returned.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImageClassificationResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImageClassificationResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImageClassificationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/ocr/traffic": {
      "post": {
        "tags": [
          "Ocr"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OcrImageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Traffic analysis completed.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/StoreTrafficResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreTrafficResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreTrafficResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/orders": {
      "get": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channel",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentStatus",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCreateBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCreateBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCreateBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/orders/{orderId}": {
      "get": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCreateBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCreateBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCreateBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/orders/{orderId}/confirm": {
      "post": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/orders/{orderId}/process": {
      "post": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/orders/{orderId}/cancel": {
      "post": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/orders/{orderId}/fulfill-via-pos": {
      "post": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FulfillViaPosBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FulfillViaPosBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FulfillViaPosBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated order with linkage stamped."
          },
          "404": {
            "description": "Order or POS transaction not found, or conflict with existing link."
          }
        }
      }
    },
    "/api/v1/orders/{orderId}/ship": {
      "post": {
        "tags": [
          "OrdersApi"
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ShipBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Order shipped; response includes the created shipment."
          },
          "404": {
            "description": "Order not found in this business account."
          }
        }
      }
    },
    "/api/v1/products": {
      "get": {
        "tags": [
          "ProductsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of products."
          },
          "403": {
            "description": "Missing scope or not a member of the business account."
          }
        }
      },
      "post": {
        "tags": [
          "ProductsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ProductDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Created product."
          },
          "400": {
            "description": "Validation error (e.g. missing productName)."
          },
          "403": {
            "description": "Missing scope or not a member of the business account."
          }
        }
      }
    },
    "/api/v1/products/{productId}": {
      "get": {
        "tags": [
          "ProductsApi"
        ],
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Product details with variants."
          },
          "404": {
            "description": "Product not found in this business account."
          }
        }
      },
      "put": {
        "tags": [
          "ProductsApi"
        ],
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ProductDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated product."
          },
          "404": {
            "description": "Product not found in this business account."
          }
        }
      },
      "patch": {
        "tags": [
          "ProductsApi"
        ],
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchProductRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchProductRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PatchProductRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated product."
          },
          "404": {
            "description": "Product not found in this business account."
          }
        }
      },
      "delete": {
        "tags": [
          "ProductsApi"
        ],
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "404": {
            "description": "Product not found in this business account."
          }
        }
      }
    },
    "/api/v1/store/receipts/{id}": {
      "get": {
        "tags": [
          "Receipts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the receipt.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptResponse"
                }
              }
            }
          },
          "404": {
            "description": "Receipt not found."
          }
        }
      },
      "delete": {
        "tags": [
          "Receipts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the receipt."
          },
          "404": {
            "description": "Receipt not found."
          }
        }
      }
    },
    "/api/v1/store/receipts/search": {
      "get": {
        "tags": [
          "Receipts"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of matching receipts.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/receipts": {
      "post": {
        "tags": [
          "Receipts"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceiptRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceiptRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceiptRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Receipt successfully created or updated.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/reservations": {
      "get": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of reservations."
          },
          "400": {
            "description": "storeId missing."
          }
        }
      },
      "post": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Created reservation."
          },
          "400": {
            "description": "Missing required fields."
          }
        }
      }
    },
    "/api/v1/reservations/{reservationId}": {
      "get": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "reservationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Reservation details."
          },
          "404": {
            "description": "Not found in this store."
          }
        }
      },
      "put": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "reservationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated reservation."
          },
          "404": {
            "description": "Not found in this store."
          }
        }
      }
    },
    "/api/v1/reservations/slots": {
      "get": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of slots."
          }
        }
      },
      "post": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationSlotDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationSlotDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReservationSlotDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Created slot."
          }
        }
      }
    },
    "/api/v1/reservations/slots/generate": {
      "post": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSlotsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSlotsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSlotsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Generation result."
          }
        }
      }
    },
    "/api/v1/reservations/slots/{slotId}": {
      "delete": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "slotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "404": {
            "description": "Slot not found."
          }
        }
      }
    },
    "/api/v1/reservations/config": {
      "get": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Reservation config."
          },
          "404": {
            "description": "No configuration for this store yet."
          }
        }
      }
    },
    "/api/v1/reservations/tables": {
      "get": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of resources."
          },
          "404": {
            "description": "Store not found in this business account."
          }
        }
      }
    },
    "/api/v1/reservations/stats": {
      "get": {
        "tags": [
          "ReservationsApi"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "month",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Stats."
          }
        }
      }
    },
    "/api/v1/sales/kpis": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "terminalId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/trend": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "months",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 12
            }
          },
          {
            "name": "terminalId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/advice": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "severity",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/forecast": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/products": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "until",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "terminalId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/visitors": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "until",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "terminalId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/multi-trend": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "months",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 12
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/churn": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lookbackDays",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 180
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sales/recommendations": {
      "get": {
        "tags": [
          "SalesApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "topN",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 5
            }
          },
          {
            "name": "lookbackDays",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 90
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/store/shelves/{id}": {
      "get": {
        "tags": [
          "Shelves"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Shelf data retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfResponse"
                }
              }
            }
          },
          "404": {
            "description": "Shelf not found."
          }
        }
      },
      "delete": {
        "tags": [
          "Shelves"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Shelf deleted successfully."
          },
          "404": {
            "description": "Shelf not found."
          }
        }
      }
    },
    "/api/v1/store/shelves/search": {
      "get": {
        "tags": [
          "Shelves"
        ],
        "parameters": [
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "keyword",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Shelf search results returned.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ShelfResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ShelfResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ShelfResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/shelves": {
      "post": {
        "tags": [
          "Shelves"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShelfRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ShelfRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ShelfRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Shelf created or updated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShelfResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/store/shelves/restock": {
      "post": {
        "tags": [
          "Shelves"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RestockEventRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RestockEventRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RestockEventRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Restock event logged.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/RestockEventResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestockEventResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestockEventResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pos/smaregi/webhook": {
      "post": {
        "tags": [
          "SmaregiWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/accounts": {
      "get": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "platform",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/accounts/{accountId}": {
      "get": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/posts": {
      "get": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePostRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePostRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePostRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/posts/{contentId}": {
      "get": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "contentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "contentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePostRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePostRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePostRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "contentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/posts/{contentId}/analytics": {
      "get": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "contentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/comments": {
      "get": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "platform",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sentiment",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "keyword",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/posts/{contentId}/publish": {
      "post": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "contentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/posts/{contentId}/schedule": {
      "post": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "contentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulePostRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulePostRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulePostRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sns/media": {
      "post": {
        "tags": [
          "SnsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngestMediaRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/IngestMediaRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/IngestMediaRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/sns/crm/search-customer": {
      "get": {
        "tags": [
          "SnsCrmApi"
        ],
        "parameters": [
          {
            "name": "orgId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "query",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/sns/crm/link-line": {
      "post": {
        "tags": [
          "SnsCrmApi"
        ],
        "summary": "Link a LINE userId to an existing SNS CRM audience record.\nPOST /api/sns/crm/link-line",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkLineRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkLineRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LinkLineRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/pos/square/webhook": {
      "post": {
        "tags": [
          "SquareWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/staff": {
      "get": {
        "tags": [
          "StaffApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "position",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "employmentType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of staff matching the filters."
          },
          "403": {
            "description": "Missing scope or not a member of the business account."
          }
        }
      },
      "post": {
        "tags": [
          "StaffApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StaffDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/StaffDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/StaffDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/staff/{staffId}": {
      "get": {
        "tags": [
          "StaffApi"
        ],
        "parameters": [
          {
            "name": "staffId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "StaffApi"
        ],
        "parameters": [
          {
            "name": "staffId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StaffDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/StaffDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/StaffDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "StaffApi"
        ],
        "parameters": [
          {
            "name": "staffId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/organizations/{organizationId}/stores/{storeId}/flyers": {
      "get": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of flyers.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlyerResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlyerResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlyerResponse"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Missing store.flyers.read scope."
          }
        }
      },
      "post": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "Title": {
                    "type": "string"
                  },
                  "ValidFrom": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ValidUntil": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "AiSummaryText": {
                    "type": "string"
                  },
                  "Image": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid fields."
          },
          "403": {
            "description": "Missing store.flyers.write scope."
          }
        }
      }
    },
    "/api/v1/organizations/{organizationId}/stores/{storeId}/flyers/{flyerId}": {
      "get": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flyerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Flyer detail.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              }
            }
          },
          "404": {
            "description": "Flyer not found."
          }
        }
      },
      "put": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flyerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "Title": {
                    "type": "string"
                  },
                  "ValidFrom": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ValidUntil": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "AiSummaryText": {
                    "type": "string"
                  },
                  "Image": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              }
            }
          },
          "404": {
            "description": "Flyer not found."
          },
          "403": {
            "description": "Missing store.flyers.write scope."
          }
        }
      },
      "delete": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flyerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "404": {
            "description": "Flyer not found."
          }
        }
      }
    },
    "/api/v1/organizations/{organizationId}/stores/{storeId}/flyers/{flyerId}/publish": {
      "post": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flyerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Published.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              }
            }
          },
          "404": {
            "description": "Flyer not found."
          }
        }
      }
    },
    "/api/v1/organizations/{organizationId}/stores/{storeId}/flyers/{flyerId}/unpublish": {
      "post": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flyerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Unpublished.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              }
            }
          },
          "404": {
            "description": "Flyer not found."
          }
        }
      }
    },
    "/api/v1/organizations/{organizationId}/stores/{storeId}/flyers/{flyerId}/expire": {
      "post": {
        "tags": [
          "StoreFlyersApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flyerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Expired.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlyerResponse"
                }
              }
            }
          },
          "404": {
            "description": "Flyer not found."
          }
        }
      }
    },
    "/api/v1/transactions": {
      "get": {
        "tags": [
          "TransactionsApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "until",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "source",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "all"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paged unified transaction feed."
          },
          "400": {
            "description": "Window exceeds 365 days or invalid date."
          },
          "403": {
            "description": "Missing scope or not a member of the business account."
          }
        }
      }
    },
    "/api/v1/organization/master/stores": {
      "get": {
        "tags": [
          "MasterData"
        ],
        "responses": {
          "200": {
            "description": "List retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterStoreResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterStoreResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterStoreResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "MasterData"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterStoreRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterStoreRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MasterStoreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Store registered or updated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MasterStoreResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterStoreResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterStoreResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/organization/master/products": {
      "get": {
        "tags": [
          "MasterData"
        ],
        "responses": {
          "200": {
            "description": "Products retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterProductResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterProductResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterProductResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "MasterData"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterProductRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterProductRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MasterProductRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Product registered successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MasterProductResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterProductResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterProductResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/organization/master/categories": {
      "get": {
        "tags": [
          "MasterData"
        ],
        "responses": {
          "200": {
            "description": "Categories retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterCategoryResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterCategoryResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MasterCategoryResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "MasterData"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterCategoryRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterCategoryRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MasterCategoryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Category registered successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MasterCategoryResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterCategoryResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterCategoryResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/organization/master/sync/status": {
      "get": {
        "tags": [
          "MasterData"
        ],
        "responses": {
          "200": {
            "description": "Sync status retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MasterSyncStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterSyncStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MasterSyncStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/organization/stores/{id}": {
      "get": {
        "tags": [
          "Stores"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/StoreResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreResponse"
                }
              }
            }
          },
          "404": {
            "description": "Store not found."
          }
        }
      }
    },
    "/api/v1/organization/stores/search": {
      "get": {
        "tags": [
          "Stores"
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/organization/stores": {
      "post": {
        "tags": [
          "Stores"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StoreRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/StoreRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/StoreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/{culture}/creative/{organizationId}/api/creatives": {
      "get": {
        "tags": [
          "CreativeApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "culture",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/{culture}/creative/{organizationId}/api/creatives/{creativeId}": {
      "get": {
        "tags": [
          "CreativeApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "creativeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "culture",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/{culture}/creative/{organizationId}/api/creatives/{creativeId}/image": {
      "get": {
        "tags": [
          "CreativeApi"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "creativeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "culture",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/auth/token": {
      "post": {
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Token issued successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials or code."
          }
        }
      }
    },
    "/api/v1/auth/verify": {
      "post": {
        "tags": [
          "Auth"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Token is valid.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TokenInfoResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenInfoResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenInfoResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired token."
          }
        }
      }
    },
    "/api/v1/auth/refresh": {
      "post": {
        "tags": [
          "Auth"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Token refreshed successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid refresh token."
          }
        }
      }
    },
    "/api/v1/auth/revoke": {
      "post": {
        "tags": [
          "Auth"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RevokeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RevokeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RevokeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Token revoked."
          },
          "400": {
            "description": "Invalid request."
          }
        }
      }
    },
    "/api/v1/auth/anonymous": {
      "post": {
        "tags": [
          "Auth"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnonymousRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AnonymousRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AnonymousRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Anonymous token issued.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AnonymousTokenResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnonymousTokenResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnonymousTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing clientId."
          },
          "429": {
            "description": "Rate-limit exceeded."
          }
        }
      }
    },
    "/api/v1/auth/upgrade": {
      "post": {
        "tags": [
          "Auth"
        ],
        "parameters": [
          {
            "name": "clientId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpgradeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpgradeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpgradeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Upgrade succeeded.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AnonymousTokenResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnonymousTokenResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnonymousTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request (missing fields, weak password, bad email)."
          },
          "401": {
            "description": "Missing or invalid bearer token."
          },
          "409": {
            "description": "Email already in use by a different account."
          }
        }
      }
    },
    "/api/v1/me": {
      "get": {
        "tags": [
          "Me"
        ],
        "responses": {
          "200": {
            "description": "The authenticated user's profile."
          },
          "403": {
            "description": "The token has no user context (organization-scoped token)."
          },
          "404": {
            "description": "The user no longer exists."
          }
        }
      }
    },
    "/api/v1/me/organizations": {
      "get": {
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paged list of organizations the caller belongs to."
          }
        }
      }
    },
    "/api/v1/me/organizations/{organizationId}/stores": {
      "get": {
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of stores under the business account."
          },
          "403": {
            "description": "Caller is not a member of the business account."
          }
        }
      }
    },
    "/api/v1/me/organizations/{organizationId}/stores/{storeId}/pos-terminals": {
      "get": {
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of POS terminals at the store."
          },
          "403": {
            "description": "Caller is not a member of the business account."
          }
        }
      }
    },
    "/api/v1/me/organizations/{organizationId}/pos-terminals": {
      "get": {
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of POS terminals across all stores in the business account."
          },
          "403": {
            "description": "Caller is not a member of the business account."
          }
        }
      }
    },
    "/api/stripe/webhook": {
      "post": {
        "tags": [
          "StripeWebhook"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/webhooks": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebhookDto"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token.",
            "content": {
              "application/json": { }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Webhooks"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWebhookRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWebhookRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Registered. Secret shown once.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreatedDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation error — invalid URL, unknown event type, etc.",
            "content": {
              "application/json": { }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token.",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/{id}": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token.",
            "content": {
              "application/json": { }
            }
          },
          "404": {
            "description": "Webhook not found or not owned by this app.",
            "content": {
              "application/json": { }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWebhookRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWebhookRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation error.",
            "content": {
              "application/json": { }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token.",
            "content": {
              "application/json": { }
            }
          },
          "404": {
            "description": "Webhook not found.",
            "content": {
              "application/json": { }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted.",
            "content": {
              "application/json": { }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token.",
            "content": {
              "application/json": { }
            }
          },
          "404": {
            "description": "Webhook not found.",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/test/{id}": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Test delivered.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookTestResult"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token.",
            "content": {
              "application/json": { }
            }
          },
          "404": {
            "description": "Webhook not found.",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/{id}/deliveries": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebhookDeliveryLogDto"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token.",
            "content": {
              "application/json": { }
            }
          },
          "404": {
            "description": "Webhook not found.",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adcampaigns/{id}": {
      "get": {
        "tags": [
          "AdCampaigns"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign found successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdCampaignResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdCampaignResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdCampaignResponse"
                }
              }
            }
          },
          "404": {
            "description": "Campaign not found."
          }
        }
      },
      "delete": {
        "tags": [
          "AdCampaigns"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Ad campaign deleted successfully."
          },
          "404": {
            "description": "Ad campaign not found."
          }
        }
      }
    },
    "/api/v1/advertiser/adcampaigns/search": {
      "get": {
        "tags": [
          "AdCampaigns"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of matching ad campaigns.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdCampaignResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdCampaignResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdCampaignResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adcampaigns": {
      "post": {
        "tags": [
          "AdCampaigns"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdCampaignRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdCampaignRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdCampaignRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Ad campaign created or updated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdCampaignResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdCampaignResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdCampaignResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adcontents/{id}": {
      "get": {
        "tags": [
          "AdContents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Creative details found.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              }
            }
          },
          "404": {
            "description": "Creative not found."
          }
        }
      },
      "delete": {
        "tags": [
          "AdContents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted successfully."
          }
        }
      }
    },
    "/api/v1/advertiser/adcontents": {
      "get": {
        "tags": [
          "AdContents"
        ],
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of creatives.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdContentResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdContentResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdContentResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "AdContents"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdContentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdContentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Creative registered successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adcontents/{id}/status": {
      "put": {
        "tags": [
          "AdContents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdContentUpdateStatusRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdContentUpdateStatusRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdContentUpdateStatusRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Status updated.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdContentResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adgroups/{id}": {
      "get": {
        "tags": [
          "AdGroups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ad group found successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdGroupResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "AdGroups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted successfully."
          }
        }
      }
    },
    "/api/v1/advertiser/adgroups/search": {
      "get": {
        "tags": [
          "AdGroups"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching ad groups.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdGroupResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdGroupResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdGroupResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adgroups": {
      "post": {
        "tags": [
          "AdGroups"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdGroupRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdGroupRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Ad group created or updated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdGroupResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/ads/{id}": {
      "get": {
        "tags": [
          "Ads"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ad found successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdResponse"
                }
              }
            }
          },
          "404": {
            "description": "Ad not found."
          }
        }
      },
      "delete": {
        "tags": [
          "Ads"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Ad deleted successfully."
          },
          "404": {
            "description": "Ad not found."
          }
        }
      }
    },
    "/api/v1/advertiser/ads/search": {
      "get": {
        "tags": [
          "Ads"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of matching ads.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/ads": {
      "post": {
        "tags": [
          "Ads"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Ad created or updated successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/callback/event": {
      "post": {
        "tags": [
          "AdServerCallback"
        ],
        "parameters": [
          {
            "name": "X-Signature",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdEventCallbackRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdEventCallbackRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdEventCallbackRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Callback received and verified.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CallbackAcknowledgeResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CallbackAcknowledgeResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CallbackAcknowledgeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request or signature."
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/callback/test": {
      "get": {
        "tags": [
          "AdServerCallback"
        ],
        "parameters": [
          {
            "name": "source",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "unknown"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Callback test successful."
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/callback/logs": {
      "get": {
        "tags": [
          "AdServerCallback"
        ],
        "responses": {
          "200": {
            "description": "List of recent callbacks.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdEventLog"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdEventLog"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdEventLog"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/fetch": {
      "get": {
        "tags": [
          "AdServer"
        ],
        "parameters": [
          {
            "name": "placementId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "region",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of eligible ads returned.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdDeliveryResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdDeliveryResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdDeliveryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/impression": {
      "post": {
        "tags": [
          "AdServer"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdImpressionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdImpressionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdImpressionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Impression recorded."
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/click": {
      "post": {
        "tags": [
          "AdServer"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdClickRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdClickRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdClickRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Click recorded."
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/conversion": {
      "post": {
        "tags": [
          "AdServer"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdConversionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdConversionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdConversionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Conversion logged successfully."
          }
        }
      }
    },
    "/api/v1/advertiser/adserver/metrics": {
      "get": {
        "tags": [
          "AdServer"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "adId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Metrics data retrieved.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdMetricsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdMetricsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdMetricsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advertiser/adspaces": {
      "get": {
        "tags": [
          "AdSpaces"
        ],
        "responses": {
          "200": {
            "description": "List retrieved successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdSpaceResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdSpaceResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AdSpaceResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "AdSpaces"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdSpaceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdSpaceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdSpaceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Ad space registered successfully.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdSpaceResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdSpaceResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdSpaceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid ad space configuration."
          }
        }
      }
    },
    "/api/v1/advertiser/adspaces/{id}": {
      "get": {
        "tags": [
          "AdSpaces"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ad space found.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AdSpaceResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdSpaceResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdSpaceResponse"
                }
              }
            }
          },
          "404": {
            "description": "Ad space not found."
          }
        }
      },
      "delete": {
        "tags": [
          "AdSpaces"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Ad space deleted successfully."
          },
          "404": {
            "description": "Ad space not found."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AdCampaignRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Ad campaign ID. Optional for new campaigns.",
            "example": "CMP-2025WINTER"
          },
          "name": {
            "type": "string",
            "description": "Campaign name or title.",
            "example": "Winter 2025 Campaign"
          },
          "budget": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Campaign budget (in JPY).",
            "format": "double",
            "example": 500000
          },
          "startDate": {
            "type": "string",
            "description": "Campaign start date (UTC).",
            "format": "date-time",
            "example": "2025-11-10T00:00:00Z"
          },
          "endDate": {
            "type": "string",
            "description": "Campaign end date (UTC).",
            "format": "date-time",
            "example": "2025-12-10T00:00:00Z"
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "description": "Campaign status (draft, active, paused, ended).",
            "example": "active"
          },
          "targeting": {
            "description": "Targeting criteria for this campaign.",
            "$ref": "#/components/schemas/TargetingCriteria"
          }
        }
      },
      "AdCampaignResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Ad campaign ID. Optional for new campaigns.",
            "example": "CMP-2025WINTER"
          },
          "name": {
            "type": "string",
            "description": "Campaign name or title.",
            "example": "Winter 2025 Campaign"
          },
          "budget": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Campaign budget (in JPY).",
            "format": "double",
            "example": 500000
          },
          "startDate": {
            "type": "string",
            "description": "Campaign start date (UTC).",
            "format": "date-time",
            "example": "2025-11-10T00:00:00Z"
          },
          "endDate": {
            "type": "string",
            "description": "Campaign end date (UTC).",
            "format": "date-time",
            "example": "2025-12-10T00:00:00Z"
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "description": "Campaign status (draft, active, paused, ended).",
            "example": "active"
          },
          "targeting": {
            "description": "Targeting criteria for this campaign.",
            "$ref": "#/components/schemas/TargetingCriteria"
          }
        },
        "description": "Response model for ad campaign."
      },
      "AdClickRequest": {
        "type": "object",
        "properties": {
          "adId": {
            "type": "string"
          },
          "campaignId": {
            "type": "string"
          },
          "userId": {
            "type": [
              "null",
              "string"
            ]
          },
          "deviceId": {
            "type": [
              "null",
              "string"
            ]
          },
          "referrer": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "AdContentRequest": {
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string",
            "description": "File name (without path).",
            "example": "coffee_promo.jpg"
          },
          "format": {
            "type": "string",
            "description": "File format (image, video, html, text).",
            "example": "image"
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type (e.g., image/jpeg)."
          },
          "fileSizeBytes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "File size in bytes.",
            "format": "int64"
          },
          "linkedAdIds": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Optional ad IDs linked to this creative."
          }
        }
      },
      "AdContentResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "uploadedAt": {
            "type": "string",
            "format": "date-time"
          },
          "fileName": {
            "type": "string",
            "description": "File name (without path).",
            "example": "coffee_promo.jpg"
          },
          "format": {
            "type": "string",
            "description": "File format (image, video, html, text).",
            "example": "image"
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type (e.g., image/jpeg)."
          },
          "fileSizeBytes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "File size in bytes.",
            "format": "int64"
          },
          "linkedAdIds": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Optional ad IDs linked to this creative."
          }
        }
      },
      "AdContentUpdateStatusRequest": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "New status for creative asset.",
            "example": "approved"
          }
        }
      },
      "AdConversionRequest": {
        "type": "object",
        "properties": {
          "adId": {
            "type": "string"
          },
          "campaignId": {
            "type": "string"
          },
          "orderId": {
            "type": "string"
          },
          "value": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "userId": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "AdDeliveryResponse": {
        "type": "object",
        "properties": {
          "adId": {
            "type": "string",
            "description": "Ad creative ID."
          },
          "campaignId": {
            "type": "string",
            "description": "Campaign that owns the ad."
          },
          "creativeUrl": {
            "type": "string",
            "description": "URL to the creative asset (image/video)."
          },
          "format": {
            "type": "string",
            "description": "Ad format type (image, video, html, native)."
          },
          "targetUrl": {
            "type": "string",
            "description": "Target URL (landing page)."
          },
          "trackingUrl": {
            "type": "string",
            "description": "Tracking URL for impression reporting."
          },
          "expiry": {
            "type": "string",
            "description": "Expiration timestamp for ad validity.",
            "format": "date-time"
          }
        }
      },
      "AdEventCallbackRequest": {
        "type": "object",
        "properties": {
          "eventType": {
            "type": "string",
            "description": "Type of event (\"impression\", \"click\", \"conversion\").",
            "example": "conversion"
          },
          "adId": {
            "type": "string",
            "description": "Ad ID that this event belongs to.",
            "example": "AD-1001"
          },
          "campaignId": {
            "type": "string",
            "description": "Campaign ID linked to the ad.",
            "example": "CMP-001"
          },
          "sourceSystem": {
            "type": "string",
            "description": "Partner or DSP identifier.",
            "example": "PartnerDSP"
          },
          "orderId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional order or transaction ID (for conversions).",
            "example": "ORD-55201"
          },
          "value": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Optional event value (e.g., purchase amount).",
            "format": "double",
            "example": 500
          },
          "timestamp": {
            "type": "string",
            "description": "UTC timestamp of when the event occurred.",
            "format": "date-time"
          }
        },
        "description": "Request model for partner callback event."
      },
      "AdEventLog": {
        "type": "object",
        "properties": {
          "eventId": {
            "type": "string"
          },
          "adId": {
            "type": "string"
          },
          "campaignId": {
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "sourceSystem": {
            "type": "string"
          },
          "receivedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Simplified log record for received events."
      },
      "AdGroupRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "campaignId": {
            "type": "string",
            "example": "CMP-2025WINTER"
          },
          "name": {
            "type": "string",
            "example": "Tokyo - Female 20s"
          },
          "bidStrategy": {
            "type": "string",
            "example": "CPC"
          },
          "bidAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double",
            "example": 120
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "example": "active"
          }
        }
      },
      "AdGroupResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "campaignId": {
            "type": "string",
            "example": "CMP-2025WINTER"
          },
          "name": {
            "type": "string",
            "example": "Tokyo - Female 20s"
          },
          "bidStrategy": {
            "type": "string",
            "example": "CPC"
          },
          "bidAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double",
            "example": 120
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "example": "active"
          }
        }
      },
      "AdImpressionRequest": {
        "type": "object",
        "properties": {
          "adId": {
            "type": "string"
          },
          "userId": {
            "type": [
              "null",
              "string"
            ]
          },
          "deviceId": {
            "type": [
              "null",
              "string"
            ]
          },
          "placementId": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "AdjustRequest": {
        "type": "object",
        "properties": {
          "locationId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantityChange": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Signed delta: +10 receives stock, -3 removes.",
            "format": "int32"
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "AdMetricsResponse": {
        "type": "object",
        "properties": {
          "campaignId": {
            "type": "string"
          },
          "adId": {
            "type": "string"
          },
          "impressions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "clicks": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "conversions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "ctr": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "cvr": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "AdRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "adGroupId": {
            "type": "string",
            "example": "ADG-001"
          },
          "adCampaignId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "format": {
            "type": "string"
          },
          "contentType": {
            "type": "string"
          },
          "targetUrl": {
            "type": "string"
          },
          "status": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "description": "Ad creation or update request model."
      },
      "AdResponse": {
        "type": "object",
        "properties": {
          "impressionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of impressions recorded for this ad.",
            "format": "int32",
            "example": 12400
          },
          "clickCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of clicks recorded for this ad.",
            "format": "int32",
            "example": 320
          },
          "campaignId": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "description": "Creation timestamp in UTC.",
            "format": "date-time",
            "example": "2025-11-11T10:00:00Z"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last updated timestamp in UTC.",
            "format": "date-time",
            "example": "2025-11-11T12:34:56Z"
          },
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "adGroupId": {
            "type": "string",
            "example": "ADG-001"
          },
          "adCampaignId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "format": {
            "type": "string"
          },
          "contentType": {
            "type": "string"
          },
          "targetUrl": {
            "type": "string"
          },
          "status": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "description": "Response model representing an ad record."
      },
      "AdSpaceRequest": {
        "required": [
          "storeId",
          "name",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Ad space ID. Required for updates."
          },
          "storeId": {
            "type": "string",
            "description": "Store ID that owns this ad space."
          },
          "name": {
            "type": "string",
            "description": "Display name of the ad space."
          },
          "type": {
            "type": "string",
            "description": "Type of ad space (DigitalSignage, ShelfDisplay, POSDisplay, etc.)."
          },
          "location": {
            "type": "string",
            "description": "Physical location within the store (Entrance, Shelf, Checkout, etc.)."
          },
          "resolution": {
            "type": "string",
            "description": "Screen resolution (e.g., 1920x1080)."
          },
          "orientation": {
            "type": "string",
            "description": "Screen orientation (Landscape or Portrait)."
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "description": "Status (Active / Inactive)."
          }
        }
      },
      "AdSpaceResponse": {
        "required": [
          "storeId",
          "name",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "storeId": {
            "type": "string",
            "description": "Store ID that owns this ad space."
          },
          "name": {
            "type": "string",
            "description": "Display name of the ad space."
          },
          "type": {
            "type": "string",
            "description": "Type of ad space (DigitalSignage, ShelfDisplay, POSDisplay, etc.)."
          },
          "location": {
            "type": "string",
            "description": "Physical location within the store (Entrance, Shelf, Checkout, etc.)."
          },
          "resolution": {
            "type": "string",
            "description": "Screen resolution (e.g., 1920x1080)."
          },
          "orientation": {
            "type": "string",
            "description": "Screen orientation (Landscape or Portrait)."
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "description": "Status (Active / Inactive)."
          }
        }
      },
      "AnonymousRequest": {
        "required": [
          "clientId"
        ],
        "type": "object",
        "properties": {
          "clientId": {
            "type": "string",
            "description": "Mobile app's registered client ID."
          },
          "deviceId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Vendor-scoped device identifier (iOS identifierForVendor, Android equivalent). Optional but recommended — bootstraps idempotency across reinstalls."
          }
        }
      },
      "AnonymousTokenResponse": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string"
          },
          "refreshToken": {
            "type": "string"
          },
          "tokenType": {
            "type": "string"
          },
          "expiresIn": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "scope": {
            "type": "string"
          },
          "isAnonymous": {
            "type": "boolean"
          }
        }
      },
      "AppManifestResponse": {
        "type": "object",
        "properties": {
          "shopId": {
            "type": "string"
          },
          "appName": {
            "type": "string"
          },
          "appDescription": {
            "type": "string"
          },
          "logoUrl": {
            "type": "string"
          },
          "faviconUrl": {
            "type": "string"
          },
          "theme": {
            "$ref": "#/components/schemas/ThemeBlock"
          },
          "welcomeMessage": {
            "type": "string"
          },
          "footerText": {
            "type": "string"
          },
          "platforms": {
            "$ref": "#/components/schemas/PlatformIdsBlock"
          },
          "template": {
            "$ref": "#/components/schemas/TemplateBlock"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "AppPageDetail": {
        "type": "object",
        "properties": {
          "body": {
            "type": "string"
          },
          "configJson": {
            "type": "string"
          },
          "pageId": {
            "type": "string"
          },
          "pageType": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "coverImageUrl": {
            "type": "string"
          },
          "iconClass": {
            "type": "string"
          },
          "sortOrder": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "isBuiltIn": {
            "type": "boolean"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "AppPageListResponse": {
        "type": "object",
        "properties": {
          "shopId": {
            "type": "string"
          },
          "pages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppPageSummary"
            }
          }
        }
      },
      "AppPageSummary": {
        "type": "object",
        "properties": {
          "pageId": {
            "type": "string"
          },
          "pageType": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "coverImageUrl": {
            "type": "string"
          },
          "iconClass": {
            "type": "string"
          },
          "sortOrder": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "isBuiltIn": {
            "type": "boolean"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "AppPostListResponse": {
        "type": "object",
        "properties": {
          "shopId": {
            "type": "string"
          },
          "posts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppPostSummary"
            }
          }
        }
      },
      "AppPostSummary": {
        "type": "object",
        "properties": {
          "postId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "coverImageUrl": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "isSticky": {
            "type": "boolean"
          },
          "publishedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BudgetRequest": {
        "required": [
          "year",
          "month",
          "amount"
        ],
        "type": "object",
        "properties": {
          "year": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "BudgetResponse": {
        "type": "object",
        "properties": {
          "year": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "isExplicitlySet": {
            "type": "boolean"
          },
          "currency": {
            "type": "string"
          },
          "updatedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "BusinessHoursDto": {
        "type": "object",
        "properties": {
          "organizationId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "dayOfWeek": {
            "type": "string"
          },
          "shiftIndex": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "openTime": {
            "type": "string"
          },
          "closeTime": {
            "type": "string"
          },
          "isClosed": {
            "type": "boolean"
          },
          "note": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "dayOfWeekJa": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "BusinessInfoResponse": {
        "type": "object",
        "properties": {
          "shopId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "weekly": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BusinessHoursDto"
            }
          },
          "specialDays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SpecialBusinessDayDto"
            }
          },
          "openNow": {
            "$ref": "#/components/schemas/OpenNowBlock"
          },
          "resolvedAtUtc": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CallbackAcknowledgeResponse": {
        "type": "object",
        "properties": {
          "eventId": {
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "receivedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Response confirming that a callback was received."
      },
      "CategorySpending": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string"
          },
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "percent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "ChangePasswordRequest": {
        "required": [
          "currentPassword",
          "newPassword"
        ],
        "type": "object",
        "properties": {
          "currentPassword": {
            "type": "string"
          },
          "newPassword": {
            "type": "string"
          }
        }
      },
      "ChannelRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Channel name (e.g., Shopify, Rakuten, Amazon)."
          },
          "apiKey": {
            "type": [
              "null",
              "string"
            ],
            "description": "API key or OAuth access token."
          },
          "webhookUrl": {
            "type": [
              "null",
              "string"
            ],
            "description": "Webhook URL for event notifications."
          },
          "syncEnabled": {
            "type": "boolean",
            "description": "Enable automatic synchronization."
          }
        }
      },
      "ChannelResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastSyncAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "name": {
            "type": "string",
            "description": "Channel name (e.g., Shopify, Rakuten, Amazon)."
          },
          "apiKey": {
            "type": [
              "null",
              "string"
            ],
            "description": "API key or OAuth access token."
          },
          "webhookUrl": {
            "type": [
              "null",
              "string"
            ],
            "description": "Webhook URL for event notifications."
          },
          "syncEnabled": {
            "type": "boolean",
            "description": "Enable automatic synchronization."
          }
        }
      },
      "ChatMessage": {
        "type": "object",
        "properties": {
          "sender": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ChatMessageRequest": {
        "type": "object",
        "properties": {
          "sender": {
            "type": "string",
            "description": "Sender type (Customer, Agent, AI)."
          },
          "type": {
            "type": [
              "null",
              "string"
            ],
            "description": "Message type (text, image, file, richcard)."
          },
          "text": {
            "type": "string",
            "description": "Message content (plain text or JSON payload)."
          }
        }
      },
      "ChatMessageResponse": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "sender": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ChatSessionRequest": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string",
            "description": "Customer ID who initiated the chat."
          },
          "agentId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Agent ID (optional if handled by AI)."
          },
          "channel": {
            "type": "string",
            "description": "Channel source (EC, Store, App, etc.)."
          }
        }
      },
      "ChatSessionResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastMessageAt": {
            "type": "string",
            "format": "date-time"
          },
          "messages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatMessage"
            }
          },
          "customerId": {
            "type": "string",
            "description": "Customer ID who initiated the chat."
          },
          "agentId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Agent ID (optional if handled by AI)."
          },
          "channel": {
            "type": "string",
            "description": "Channel source (EC, Store, App, etc.)."
          }
        }
      },
      "ChatSessionSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "lastMessageAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CheckInCampaignPreviewResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "campaign": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/CheckInCampaignResponse"
              }
            ]
          }
        }
      },
      "CheckInCampaignResponse": {
        "type": "object",
        "properties": {
          "campaignId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "validFrom": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "validUntil": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "maxCheckInsPerUserPerDay": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "CheckInResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "checkedInAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "todayCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "campaign": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/CheckInCampaignResponse"
              }
            ]
          }
        }
      },
      "ChurnPredictionRequest": {
        "type": "object",
        "properties": {
          "customerIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of customer IDs to score for churn risk."
          }
        }
      },
      "ChurnPredictionResponse": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string"
          },
          "riskScore": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "lastPurchaseAt": {
            "type": "string",
            "format": "date-time"
          },
          "recommendedAction": {
            "type": "string"
          }
        }
      },
      "ClaimRequest": {
        "type": "object",
        "properties": {
          "channel": {
            "type": "string",
            "description": "line / ios / android / web / email"
          },
          "claimToken": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional — the claim token from last-receipt if not passed in header."
          },
          "userId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional — authenticated RR user id if the client knows one."
          },
          "deliveryTarget": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional — delivery target (email / LINE userId) when channel demands one."
          }
        }
      },
      "ClaimResponse": {
        "type": "object",
        "properties": {
          "claimId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "deliveryChannel": {
            "type": "string"
          }
        }
      },
      "CouponCampaignRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "example": "CCMP-2025WINTER"
          },
          "name": {
            "type": "string",
            "example": "Winter Cashback 2025"
          },
          "description": {
            "type": "string",
            "example": "¥100 off any beverage purchase."
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "example": "active"
          },
          "targetSegment": {
            "$ref": "#/components/schemas/CouponTarget"
          }
        }
      },
      "CouponCampaignResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "example": "CCMP-2025WINTER"
          },
          "name": {
            "type": "string",
            "example": "Winter Cashback 2025"
          },
          "description": {
            "type": "string",
            "example": "¥100 off any beverage purchase."
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "example": "active"
          },
          "targetSegment": {
            "$ref": "#/components/schemas/CouponTarget"
          }
        }
      },
      "CouponGroupRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "campaignId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "status": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "CouponGroupResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "campaignId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "status": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "CouponRedemptionRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "example": "WINTER100"
          },
          "storeId": {
            "type": "string",
            "example": "STR-001"
          },
          "customerId": {
            "type": [
              "null",
              "string"
            ],
            "example": "CUS-001"
          },
          "orderId": {
            "type": "string",
            "example": "ORD-12345"
          }
        },
        "description": "Request to redeem a coupon."
      },
      "CouponRedemptionResponse": {
        "type": "object",
        "properties": {
          "redemptionId": {
            "type": "string",
            "example": "RED-123456"
          },
          "code": {
            "type": "string",
            "example": "WINTER100"
          },
          "storeId": {
            "type": "string"
          },
          "customerId": {
            "type": [
              "null",
              "string"
            ]
          },
          "orderId": {
            "type": "string"
          },
          "discountApplied": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "redeemedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Response returned after redeeming a coupon."
      },
      "CouponRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "groupId": {
            "type": "string",
            "example": "CG-001"
          },
          "code": {
            "type": "string",
            "example": "WINTER100"
          },
          "discountType": {
            "type": "string",
            "example": "amount"
          },
          "discountValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double",
            "example": 100
          },
          "validFrom": {
            "type": "string",
            "format": "date-time"
          },
          "validTo": {
            "type": "string",
            "format": "date-time"
          },
          "conditions": {
            "type": "string",
            "example": "Valid for beverage purchases only."
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "example": "active"
          }
        }
      },
      "CouponResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "groupId": {
            "type": "string",
            "example": "CG-001"
          },
          "code": {
            "type": "string",
            "example": "WINTER100"
          },
          "discountType": {
            "type": "string",
            "example": "amount"
          },
          "discountValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double",
            "example": 100
          },
          "validFrom": {
            "type": "string",
            "format": "date-time"
          },
          "validTo": {
            "type": "string",
            "format": "date-time"
          },
          "conditions": {
            "type": "string",
            "example": "Valid for beverage purchases only."
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "example": "active"
          }
        }
      },
      "CouponTarget": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "example": "Kanto"
          },
          "ageRange": {
            "type": "string",
            "example": "18-40"
          },
          "memberTier": {
            "type": "string",
            "example": "Silver+"
          }
        }
      },
      "CouponVerificationRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Coupon code to verify.",
            "example": "WINTER100"
          },
          "storeId": {
            "type": "string",
            "description": "Store ID where coupon will be used.",
            "example": "STR-0001"
          },
          "customerId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Customer ID (optional, for member-targeted coupons).",
            "example": "CUS-0001"
          }
        },
        "description": "Request to verify a coupon."
      },
      "CouponVerificationResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "isValid": {
            "type": "boolean"
          },
          "reason": {
            "type": "string"
          },
          "discountType": {
            "type": "string"
          },
          "discountValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "validUntil": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Response returned from coupon verification."
      },
      "CreateCheckInRequest": {
        "required": [
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "method": {
            "type": [
              "null",
              "string"
            ],
            "description": "\"QR\" (default) or \"NFC\"."
          },
          "deviceId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional opaque device id for fraud triage."
          }
        }
      },
      "CreatePostRequest": {
        "type": "object",
        "properties": {
          "accountIds": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          },
          "body": {
            "type": [
              "null",
              "string"
            ]
          },
          "hashtags": {
            "type": [
              "null",
              "string"
            ]
          },
          "imageUrls": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          },
          "videoUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "campaignId": {
            "type": [
              "null",
              "string"
            ]
          },
          "scheduledAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "platformOverrides": {
            "type": [
              "null",
              "object"
            ],
            "additionalProperties": {
              "$ref": "#/components/schemas/PlatformContentOverride"
            },
            "description": "Per-platform body/hashtags/title overrides keyed by platform name (e.g. \"X\", \"Instagram\")."
          },
          "youTubePrivacy": {
            "type": [
              "null",
              "string"
            ],
            "description": "YouTube only — \"public\" | \"unlisted\" | \"private\". Defaults to \"unlisted\"."
          },
          "publishNow": {
            "type": "boolean",
            "description": "If true, publish immediately after creating the draft."
          }
        }
      },
      "CreateWebhookRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "HTTPS URL to deliver event payloads to. Must be publicly reachable.\nLocalhost and private IP ranges are rejected.",
            "example": "https://your-app.example.com/hooks"
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "One or more event types to subscribe to.\nValid values: receipt.created, receipt.updated, receipt.deleted,\norder.created, order.updated, coupon.redeemed, coupon.expired,\ncustomer.visited, test.ping",
            "example": [
              "order.created",
              "order.updated"
            ]
          },
          "secret": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional signing secret used to compute X-RR-Signature.\nAuto-generated if omitted. Shown only once on creation.",
            "example": "my-signing-secret"
          }
        },
        "description": "Request body for registering a new webhook."
      },
      "CustomerPurchaseResponse": {
        "type": "object",
        "properties": {
          "receiptId": {
            "type": "string",
            "description": "Receipt / transaction ID."
          },
          "storeId": {
            "type": "string",
            "description": "Store ID where the purchase occurred."
          },
          "storeName": {
            "type": "string",
            "description": "Store name where the purchase occurred. May be blank\n    for receipts written before store-name snapshots were captured\n    on the CRM index."
          },
          "receiptNumber": {
            "type": "string",
            "description": "Vendor receipt number on the issued receipt, when\n    the POS provides one."
          },
          "total": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Total amount (tax included).",
            "format": "double"
          },
          "timestamp": {
            "type": "string",
            "description": "Purchase timestamp (UTC).",
            "format": "date-time"
          },
          "storeReceiptRef": {
            "type": "string",
            "description": "Reference back to the store-owned master row in\n    PosTransaction. Format: `{TerminalId}|{YYYY-MM}|{TransactionId}`.\n    Use for the detail-view endpoint (future)."
          }
        }
      },
      "CustomerRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Unique customer ID (optional for new customers).",
            "example": "CUS-001"
          },
          "name": {
            "type": "string",
            "description": "Full name of the customer (\"LastName FirstName\")."
          },
          "email": {
            "type": [
              "null",
              "string"
            ],
            "description": "Email address."
          },
          "gender": {
            "type": [
              "null",
              "string"
            ],
            "description": "Gender (male/female/other)."
          },
          "birthDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "Birth date (optional).",
            "format": "date-time"
          },
          "loyaltyRank": {
            "type": [
              "null",
              "string"
            ],
            "description": "Membership level (e.g., Standard, Silver, Gold, Platinum)."
          },
          "tags": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Tags representing customer segments or behaviors."
          }
        }
      },
      "CustomerResponse": {
        "type": "object",
        "properties": {
          "totalSpend": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Total lifetime spend of the customer.",
            "format": "double"
          },
          "purchaseCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Total number of visits/purchases.",
            "format": "int32"
          },
          "lastPurchaseAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "Date and time of the last visit/purchase.",
            "format": "date-time"
          },
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Unique customer ID (optional for new customers).",
            "example": "CUS-001"
          },
          "name": {
            "type": "string",
            "description": "Full name of the customer (\"LastName FirstName\")."
          },
          "email": {
            "type": [
              "null",
              "string"
            ],
            "description": "Email address."
          },
          "gender": {
            "type": [
              "null",
              "string"
            ],
            "description": "Gender (male/female/other)."
          },
          "birthDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "Birth date (optional).",
            "format": "date-time"
          },
          "loyaltyRank": {
            "type": [
              "null",
              "string"
            ],
            "description": "Membership level (e.g., Standard, Silver, Gold, Platinum)."
          },
          "tags": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Tags representing customer segments or behaviors."
          }
        }
      },
      "DeleteAccountRequest": {
        "required": [
          "confirm"
        ],
        "type": "object",
        "properties": {
          "confirm": {
            "type": "boolean",
            "description": "Must be true to proceed — makes accidental deletion harder."
          },
          "password": {
            "type": [
              "null",
              "string"
            ],
            "description": "Required when the caller has a registered (non-anonymous) account."
          }
        }
      },
      "DeletionResponse": {
        "type": "object",
        "properties": {
          "deletedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "DemandForecastRequest": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "description": "Product ID for which to forecast demand."
          },
          "horizonDays": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of future days to predict.",
            "format": "int32",
            "example": 14
          }
        }
      },
      "DemandForecastResponse": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "predictedDemand": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "suggestedRestockQty": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "recommendedOrderDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "EcommerceProductRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "EC Product ID. Leave empty to create new."
          },
          "name": {
            "type": "string",
            "description": "Product name (max 100 chars)."
          },
          "sku": {
            "type": [
              "null",
              "string"
            ],
            "description": "SKU or unique product code."
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Standard retail price (tax inclusive).",
            "format": "double"
          },
          "stockQty": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Stock quantity available for online sale.",
            "format": "int32"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of connected channels to publish to (e.g. Shopify, Rakuten)."
          },
          "linkedStoreProductId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Linked store product ID (for omnichannel mapping)."
          }
        }
      },
      "EcommerceProductResponse": {
        "type": "object",
        "properties": {
          "updatedAt": {
            "type": "string",
            "description": "Timestamp when product was last updated.",
            "format": "date-time"
          },
          "onlineChannels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "EC Product ID. Leave empty to create new."
          },
          "name": {
            "type": "string",
            "description": "Product name (max 100 chars)."
          },
          "sku": {
            "type": [
              "null",
              "string"
            ],
            "description": "SKU or unique product code."
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Standard retail price (tax inclusive).",
            "format": "double"
          },
          "stockQty": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Stock quantity available for online sale.",
            "format": "int32"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of connected channels to publish to (e.g. Shopify, Rakuten)."
          },
          "linkedStoreProductId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Linked store product ID (for omnichannel mapping)."
          }
        }
      },
      "EntityTagHeaderValue": {
        "type": "object",
        "properties": {
          "tag": {
            "$ref": "#/components/schemas/StringSegment"
          },
          "isWeak": {
            "type": "boolean"
          }
        }
      },
      "FavoriteStatusResponse": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "isFavorite": {
            "type": "boolean"
          }
        }
      },
      "FavoriteStoreDto": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FavoriteStoreSnapshot": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "storeType": {
            "type": "string"
          },
          "storeTypeDisplay": {
            "type": "string"
          },
          "prefecture": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "addressLine1": {
            "type": "string"
          },
          "phoneNumber": {
            "type": "string"
          }
        }
      },
      "FavoriteStoreWithSnapshot": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "store": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FavoriteStoreSnapshot"
              }
            ]
          }
        },
        "description": "Favorite row enriched with a nested store snapshot (Option B from\ntask t-e9a2f189). The nested shape matches the receipt-detail\nconvention elsewhere in the API and is what the iOS decoder\nalready accepts. When the store is unresolvable the snapshot is\nnull so the client can still render the row with the id alone."
      },
      "FileResult": {
        "type": "object",
        "properties": {
          "contentType": {
            "type": [
              "null",
              "string"
            ]
          },
          "fileDownloadName": {
            "type": [
              "null",
              "string"
            ]
          },
          "lastModified": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "entityTag": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/EntityTagHeaderValue"
              }
            ]
          },
          "enableRangeProcessing": {
            "type": "boolean"
          }
        }
      },
      "FlyerDetailItem": {
        "type": "object",
        "properties": {
          "itemName": {
            "type": "string"
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "priceUnit": {
            "type": [
              "null",
              "string"
            ]
          },
          "originalPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "discountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "category": {
            "type": "string"
          },
          "boundingBoxJson": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "FlyerDetailResponse": {
        "type": "object",
        "properties": {
          "flyerId": {
            "type": "string"
          },
          "canonicalFlyerId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "validFrom": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "validUntil": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "aiSummary": {
            "type": "string"
          },
          "imageUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "sourceUrl": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FlyerDetailItem"
            }
          }
        }
      },
      "FlyerListItem": {
        "type": "object",
        "properties": {
          "flyerId": {
            "type": "string"
          },
          "canonicalFlyerId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "validFrom": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "validUntil": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "aiSummary": {
            "type": "string"
          },
          "imageUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "itemCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "isActive": {
            "type": "boolean"
          }
        }
      },
      "FlyerResponse": {
        "type": "object",
        "properties": {
          "flyerId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "canonicalFlyerId": {
            "type": "string"
          },
          "sourceType": {
            "type": "string"
          },
          "publicationState": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "validFrom": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "validUntil": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "aiSummaryText": {
            "type": "string"
          },
          "imageUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "processedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "ForecastValue": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "predictedSales": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "lowerBound": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "upperBound": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "FulfillViaPosBody": {
        "type": "object",
        "properties": {
          "posTerminalId": {
            "type": [
              "null",
              "string"
            ]
          },
          "posTransactionId": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "GenerateSlotsRequest": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          },
          "perResource": {
            "type": "boolean",
            "description": "true = one slot series per reservable resource\n    (table/room) from the store layout; false = plain\n    capacity-based slots from the reservation config."
          }
        }
      },
      "GoogleSaveResponse": {
        "type": "object",
        "properties": {
          "saveUrl": {
            "type": "string"
          }
        }
      },
      "IFormFile": {
        "type": "string",
        "format": "binary"
      },
      "ImageClassificationResponse": {
        "type": "object",
        "properties": {
          "predictedLabel": {
            "type": "string"
          },
          "confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "suggestedAction": {
            "type": "string"
          }
        }
      },
      "ImpressionBatchRequest": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Item"
            }
          }
        }
      },
      "IncomeRequest": {
        "required": [
          "year",
          "month",
          "amount"
        ],
        "type": "object",
        "properties": {
          "year": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "IncomeResponse": {
        "type": "object",
        "properties": {
          "year": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "isExplicitlySet": {
            "type": "boolean"
          },
          "currency": {
            "type": "string"
          },
          "updatedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "IngestMediaRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "Item": {
        "type": "object",
        "properties": {
          "eventId": {
            "type": "string"
          },
          "creativeId": {
            "type": "string"
          },
          "campaignId": {
            "type": "string"
          },
          "placementId": {
            "type": "string"
          },
          "playedAtUtc": {
            "type": "string",
            "format": "date-time"
          },
          "durationPlayedMs": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "completed": {
            "type": "boolean"
          }
        }
      },
      "JobAssignmentDto": {
        "type": "object",
        "properties": {
          "jobTitle": {
            "type": "string"
          },
          "payType": {
            "type": "string"
          },
          "hourlyRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "annualRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "weeklyHours": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "locationIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "LastReceiptResponse": {
        "type": "object",
        "properties": {
          "terminalId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "transaction": {
            "$ref": "#/components/schemas/ReceiptSummary"
          },
          "claimableUntil": {
            "type": "string",
            "format": "date-time"
          },
          "claimToken": {
            "type": "string"
          }
        }
      },
      "LinkLineRequest": {
        "type": "object",
        "properties": {
          "audienceId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "lineUserId": {
            "type": "string"
          },
          "lineDisplayName": {
            "type": [
              "null",
              "string"
            ]
          },
          "linePictureUrl": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "MasterCategoryRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "name": {
            "type": "string",
            "description": "Category name (e.g., Drinks, Food, Household)."
          }
        }
      },
      "MasterCategoryResponse": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "Category name (e.g., Drinks, Food, Household)."
          }
        }
      },
      "MasterProductRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ]
          },
          "name": {
            "type": "string",
            "description": "Product name."
          },
          "categoryId": {
            "type": "string",
            "description": "Category ID this product belongs to."
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Unit price (tax included).",
            "format": "double"
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "description": "Status (Active / Inactive)."
          }
        }
      },
      "MasterProductResponse": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "Product name."
          },
          "categoryId": {
            "type": "string",
            "description": "Category ID this product belongs to."
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Unit price (tax included).",
            "format": "double"
          },
          "status": {
            "type": [
              "null",
              "string"
            ],
            "description": "Status (Active / Inactive)."
          }
        }
      },
      "MasterStoreRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Store ID (required for updates)."
          },
          "name": {
            "type": "string",
            "description": "Store name."
          },
          "address": {
            "type": "string",
            "description": "Store address."
          },
          "openHours": {
            "type": "string",
            "description": "Opening hours (e.g., 9:00–21:00)."
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Latitude coordinate (optional).",
            "format": "double"
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Longitude coordinate (optional).",
            "format": "double"
          }
        }
      },
      "MasterStoreResponse": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "Store name."
          },
          "address": {
            "type": "string",
            "description": "Store address."
          },
          "openHours": {
            "type": "string",
            "description": "Opening hours (e.g., 9:00–21:00)."
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Latitude coordinate (optional).",
            "format": "double"
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Longitude coordinate (optional).",
            "format": "double"
          }
        }
      },
      "MasterSyncStatusResponse": {
        "type": "object",
        "properties": {
          "lastSyncedAt": {
            "type": "string",
            "description": "Last synchronization timestamp (UTC).",
            "format": "date-time"
          },
          "pendingItems": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of items pending synchronization.",
            "format": "int32"
          },
          "status": {
            "type": "string",
            "description": "Overall synchronization status (OK, Partial, Error)."
          }
        }
      },
      "MembershipCardConfigDto": {
        "type": "object",
        "properties": {
          "organizationId": {
            "type": "string"
          },
          "barcodeFormat": {
            "type": "string"
          },
          "barcodeSource": {
            "type": "string"
          },
          "showSecondaryQr": {
            "type": "boolean"
          },
          "showName": {
            "type": "boolean"
          },
          "showMemberNumber": {
            "type": "boolean"
          },
          "showRank": {
            "type": "boolean"
          },
          "showPoints": {
            "type": "boolean"
          },
          "showExpiry": {
            "type": "boolean"
          },
          "showVisitCount": {
            "type": "boolean"
          },
          "templateJson": {
            "type": "string"
          },
          "isAppleWalletEnabled": {
            "type": "boolean"
          },
          "isGoogleWalletEnabled": {
            "type": "boolean"
          },
          "walletBackgroundColor": {
            "type": "string"
          },
          "walletForegroundColor": {
            "type": "string"
          },
          "walletLabelColor": {
            "type": "string"
          },
          "walletLogoUrl": {
            "type": "string"
          },
          "walletStripImageUrl": {
            "type": "string"
          },
          "walletHeroImageUrl": {
            "type": "string"
          },
          "walletFieldsJson": {
            "type": "string"
          },
          "walletRankDesignsJson": {
            "type": "string"
          },
          "isLocationNotificationEnabled": {
            "type": "boolean"
          },
          "locationRelevantText": {
            "type": "string"
          },
          "locationMaxDistanceMeters": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MonthlySpendingSummary": {
        "type": "object",
        "properties": {
          "year": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "totalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "receiptCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "previousMonthTotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "differenceAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "differencePercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "categories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CategorySpending"
            }
          },
          "incomeAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Monthly income — declared figure, or statement-import total. Null when unknown.",
            "format": "double"
          },
          "incomeSource": {
            "type": [
              "null",
              "string"
            ],
            "description": "\"declared\" (user-set monthly income) | \"statements\" (imported 入金). Null when unknown."
          },
          "savingsAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Income − spending. Null when income unknown.",
            "format": "double"
          },
          "savingsRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Savings as % of income. Null when income unknown.",
            "format": "double"
          }
        }
      },
      "OcrImageRequest": {
        "type": "object",
        "properties": {
          "image": {
            "type": "string",
            "description": "Base64-encoded image data or URL.",
            "example": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
          },
          "type": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional image type (e.g., \"receipt\", \"shelf\").",
            "example": "receipt"
          },
          "storeId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional store ID for context-based analysis."
          }
        }
      },
      "OcrItem": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Recognized item name."
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Detected price value.",
            "format": "double"
          },
          "confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Confidence score (0\\u20131).",
            "format": "double"
          }
        }
      },
      "OmsOrderItemDto": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "productName": {
            "type": "string"
          },
          "sku": {
            "type": "string"
          },
          "quantity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "unitPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "subtotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "unit": {
            "type": "string"
          }
        }
      },
      "OpenNowBlock": {
        "type": "object",
        "properties": {
          "isOpen": {
            "type": "boolean"
          },
          "closesAtUtc": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "nextOpensAtUtc": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "note": {
            "type": "string"
          },
          "source": {
            "type": "string"
          }
        }
      },
      "OrderCreateBody": {
        "type": "object",
        "properties": {
          "orderNumber": {
            "type": [
              "null",
              "string"
            ]
          },
          "channel": {
            "type": [
              "null",
              "string"
            ]
          },
          "customerName": {
            "type": [
              "null",
              "string"
            ]
          },
          "customerEmail": {
            "type": [
              "null",
              "string"
            ]
          },
          "customerPhone": {
            "type": [
              "null",
              "string"
            ]
          },
          "shippingAddress": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ShippingAddressBody"
              }
            ]
          },
          "items": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/OmsOrderItemDto"
            }
          },
          "paymentMethod": {
            "type": [
              "null",
              "string"
            ]
          },
          "paymentStatus": {
            "type": [
              "null",
              "string"
            ]
          },
          "subtotalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "taxAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "shippingAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "discountAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "totalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "linkedStoreId": {
            "type": [
              "null",
              "string"
            ]
          },
          "notes": {
            "type": [
              "null",
              "string"
            ]
          },
          "isPreOrder": {
            "type": [
              "null",
              "boolean"
            ]
          },
          "preOrderTargetShipDate": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        },
        "description": "Inbound shape for create / update. Keeps the JSON surface flatter\nthan the internal DTO and avoids exposing computed display fields\n(StatusDisplayJa, badge classes)."
      },
      "PairRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "screenWidth": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "screenHeight": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "supportsVideo": {
            "type": "boolean"
          },
          "supportsAudio": {
            "type": "boolean"
          }
        }
      },
      "PasswordChangedResponse": {
        "type": "object",
        "properties": {
          "changedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PatchProductRequest": {
        "type": "object",
        "properties": {
          "productName": {
            "type": [
              "null",
              "string"
            ]
          },
          "description": {
            "type": [
              "null",
              "string"
            ]
          },
          "category": {
            "type": [
              "null",
              "string"
            ]
          },
          "brand": {
            "type": [
              "null",
              "string"
            ]
          },
          "supplier": {
            "type": [
              "null",
              "string"
            ]
          },
          "sku": {
            "type": [
              "null",
              "string"
            ]
          },
          "janCode": {
            "type": [
              "null",
              "string"
            ]
          },
          "basePrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "baseCostPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "taxRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "status": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "PlatformContentOverride": {
        "type": "object",
        "properties": {
          "body": {
            "type": [
              "null",
              "string"
            ]
          },
          "hashtags": {
            "type": [
              "null",
              "string"
            ]
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "PlatformIdsBlock": {
        "type": "object",
        "properties": {
          "lineLiffId": {
            "type": "string"
          },
          "iosAppId": {
            "type": "string"
          },
          "iosBundleId": {
            "type": "string"
          },
          "androidPackageName": {
            "type": "string"
          },
          "androidAppId": {
            "type": "string"
          },
          "appUrl": {
            "type": "string"
          }
        }
      },
      "ProductDto": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "productName": {
            "type": "string"
          },
          "sku": {
            "type": "string"
          },
          "janCode": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "supplier": {
            "type": "string"
          },
          "modelNumber": {
            "type": "string"
          },
          "series": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "weight": {
            "type": "string"
          },
          "contentVolume": {
            "type": "string"
          },
          "material": {
            "type": "string"
          },
          "specification": {
            "type": "string"
          },
          "countryOfOrigin": {
            "type": "string"
          },
          "casePackSize": {
            "type": "string"
          },
          "minimumOrderQuantity": {
            "type": "string"
          },
          "leadTimeDays": {
            "type": "string"
          },
          "hsCode": {
            "type": "string"
          },
          "storageRequirements": {
            "type": "string"
          },
          "certifications": {
            "type": "string"
          },
          "internalMemo": {
            "type": "string"
          },
          "basePrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "baseCostPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "taxRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "storePricesJson": {
            "type": "string"
          },
          "imageUrl": {
            "type": "string"
          },
          "imageUrlsJson": {
            "type": "string"
          },
          "imageUrls": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          },
          "status": {
            "type": "string"
          },
          "sortOrder": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "hasVariants": {
            "type": "boolean"
          },
          "variantOptionsJson": {
            "type": "string"
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductVariantDto"
            }
          },
          "variantOptions": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/VariantOptionDto"
            }
          },
          "minVariantPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "maxVariantPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "squareCatalogObjectId": {
            "type": "string"
          },
          "squareVariationId": {
            "type": "string"
          },
          "smaregiProductId": {
            "type": "string"
          },
          "shopifyProductGid": {
            "type": "string"
          },
          "shopifyShopDomain": {
            "type": "string"
          },
          "shopifyUpdatedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "isFromShopify": {
            "type": "boolean"
          },
          "isPreOrder": {
            "type": "boolean"
          },
          "preOrderReleaseDate": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "preOrderNote": {
            "type": "string"
          },
          "preOrderReleaseDateDisplay": {
            "type": [
              "null",
              "string"
            ]
          },
          "sourceBrandOrgId": {
            "type": "string"
          },
          "sourceBrandProductId": {
            "type": "string"
          },
          "allowSubscriptions": {
            "type": "boolean"
          },
          "sourceBrandSyncedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "isFromBrand": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "storePrices": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/StorePriceDto"
            }
          },
          "formattedBasePrice": {
            "type": [
              "null",
              "string"
            ]
          },
          "formattedBaseCostPrice": {
            "type": [
              "null",
              "string"
            ]
          },
          "taxIncludedPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "formattedTaxIncludedPrice": {
            "type": [
              "null",
              "string"
            ]
          },
          "profitMargin": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "taxRateDisplay": {
            "type": [
              "null",
              "string"
            ]
          },
          "statusDisplayJa": {
            "type": [
              "null",
              "string"
            ]
          },
          "statusBadgeClass": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "ProductVariantDto": {
        "type": "object",
        "properties": {
          "variantId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "parentProductId": {
            "type": "string"
          },
          "sku": {
            "type": "string"
          },
          "janCode": {
            "type": "string"
          },
          "imageUrl": {
            "type": "string"
          },
          "attributesJson": {
            "type": "string"
          },
          "basePrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "baseCostPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "taxRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "storePricesJson": {
            "type": "string"
          },
          "squareVariationId": {
            "type": "string"
          },
          "shopifyVariantGid": {
            "type": "string"
          },
          "shopifyInventoryItemId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "sortOrder": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "attributes": {
            "type": [
              "null",
              "object"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "displayLabel": {
            "type": [
              "null",
              "string"
            ]
          },
          "storePrices": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/StorePriceDto"
            }
          },
          "formattedBasePrice": {
            "type": [
              "null",
              "string"
            ]
          },
          "taxIncludedPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "formattedTaxIncludedPrice": {
            "type": [
              "null",
              "string"
            ]
          },
          "taxRateDisplay": {
            "type": [
              "null",
              "string"
            ]
          },
          "statusDisplayJa": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "PublicStoreDetail": {
        "type": "object",
        "properties": {
          "addressLine2": {
            "type": "string"
          },
          "websiteUrl": {
            "type": "string"
          },
          "instagramUrl": {
            "type": "string"
          },
          "xUrl": {
            "type": "string"
          },
          "menuUrl": {
            "type": "string"
          },
          "reservationUrl": {
            "type": "string"
          },
          "hours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StoreHourEntry"
            }
          },
          "googleRating": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "googlePriceLevel": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "storeId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "storeType": {
            "type": "string"
          },
          "storeTypeDisplay": {
            "type": "string"
          },
          "postalCode": {
            "type": "string"
          },
          "prefecture": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "addressLine1": {
            "type": "string"
          },
          "phoneNumber": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "PublicStoreListResponse": {
        "type": "object",
        "properties": {
          "totalCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64",
            "example": 18701
          },
          "page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32",
            "example": 1
          },
          "pageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32",
            "example": 30
          },
          "hasMore": {
            "type": "boolean"
          },
          "stores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicStoreSummary"
            }
          }
        }
      },
      "PublicStoreSummary": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "storeType": {
            "type": "string"
          },
          "storeTypeDisplay": {
            "type": "string"
          },
          "postalCode": {
            "type": "string"
          },
          "prefecture": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "addressLine1": {
            "type": "string"
          },
          "phoneNumber": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "ReceiptDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "totalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "taxAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "paymentMethod": {
            "type": "string"
          },
          "taxRegistrationNumber": {
            "type": [
              "null",
              "string"
            ]
          },
          "store": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ReceiptStoreDto"
              }
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptItemDto"
            }
          },
          "receiptDate": {
            "type": "string",
            "format": "date-time"
          },
          "category": {
            "type": "string"
          },
          "imageUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "notes": {
            "type": [
              "null",
              "string"
            ]
          },
          "sourceTransactionId": {
            "type": [
              "null",
              "string"
            ]
          },
          "linkedStoreId": {
            "type": [
              "null",
              "string"
            ]
          },
          "linkedStore": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/StoreLinkResultDto"
              }
            ]
          },
          "storeReceiptRef": {
            "type": [
              "null",
              "string"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "source": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "ReceiptItem": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Item name (up to 50 characters).",
            "example": "Coffee M"
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Unit price (tax included).",
            "format": "double",
            "example": 180
          }
        },
        "description": "Individual line item in a receipt."
      },
      "ReceiptItemDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "itemName": {
            "type": "string"
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "quantity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "ReceiptLineItem": {
        "type": "object",
        "properties": {
          "productName": {
            "type": "string"
          },
          "quantity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "unitPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "subtotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "ReceiptListItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "totalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "taxAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "category": {
            "type": "string"
          },
          "paymentMethod": {
            "type": "string"
          },
          "receiptDate": {
            "type": "string",
            "format": "date-time"
          },
          "imageUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "linkedStoreId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Directory StoreId if this receipt is linked."
          },
          "linkedStore": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Resolved directory snapshot when string? ReceiptListItem.LinkedStoreId is\nset and the store is still in the index. Null when unlinked\nor the store was removed.",
                "$ref": "#/components/schemas/StoreLinkResultDto"
              }
            ]
          }
        }
      },
      "ReceiptOcrResponse": {
        "type": "object",
        "properties": {
          "storeName": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "total": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OcrItem"
            }
          }
        }
      },
      "ReceiptRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "The receipt ID.\nIf omitted, a new one will be generated.",
            "example": "RCP-20251111001"
          },
          "storeId": {
            "type": "string",
            "description": "Store ID (required).",
            "example": "STR-0001"
          },
          "total": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Total amount (tax included).\nCannot be negative.",
            "format": "double",
            "example": 842
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptItem"
            },
            "description": "Line items contained in this receipt."
          }
        },
        "description": "Request model for creating or updating a receipt."
      },
      "ReceiptResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The receipt ID."
          },
          "storeId": {
            "type": "string",
            "description": "Store ID."
          },
          "total": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "Total amount (tax included).",
            "format": "double"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptItem"
            },
            "description": "List of purchased items."
          },
          "timestamp": {
            "type": "string",
            "description": "Date and time when the record was created or last updated (UTC).",
            "format": "date-time"
          }
        },
        "description": "Response model for a receipt record."
      },
      "ReceiptStoreDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "phone": {
            "type": [
              "null",
              "string"
            ]
          },
          "address": {
            "type": [
              "null",
              "string"
            ]
          },
          "officialStoreId": {
            "type": [
              "null",
              "string"
            ]
          },
          "officialStorePartitionKey": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "ReceiptSummary": {
        "type": "object",
        "properties": {
          "transactionId": {
            "type": "string"
          },
          "receiptNumber": {
            "type": "string"
          },
          "transactionDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "totalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "taxAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "itemCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "paymentMethod": {
            "type": "string"
          },
          "lineItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptLineItem"
            }
          }
        }
      },
      "RecommendationRequest": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Customer ID for generating personalized product suggestions."
          }
        }
      },
      "RecommendationResponse": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string"
          },
          "recommendations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecommendedItem"
            }
          }
        }
      },
      "RecommendedItem": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "productName": {
            "type": "string"
          },
          "score": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "RefreshRequest": {
        "required": [
          "refreshToken",
          "clientId",
          "clientSecret"
        ],
        "type": "object",
        "properties": {
          "refreshToken": {
            "type": "string",
            "description": "Refresh token issued previously"
          },
          "clientId": {
            "type": "string",
            "description": "Client ID"
          },
          "clientSecret": {
            "type": "string",
            "description": "Client secret"
          }
        }
      },
      "RegisterDeviceRequest": {
        "required": [
          "platform",
          "token"
        ],
        "type": "object",
        "properties": {
          "platform": {
            "type": "string"
          },
          "token": {
            "type": "string"
          },
          "appVersion": {
            "type": [
              "null",
              "string"
            ]
          },
          "locale": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "RegisterTokenRequest": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "deviceId": {
            "type": "string"
          },
          "token": {
            "type": "string"
          },
          "appVersion": {
            "type": [
              "null",
              "string"
            ]
          },
          "osVersion": {
            "type": [
              "null",
              "string"
            ]
          },
          "deviceModel": {
            "type": [
              "null",
              "string"
            ]
          },
          "locale": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "RegisterTokenResponse": {
        "type": "object",
        "properties": {
          "shopId": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "deviceId": {
            "type": "string"
          },
          "lastSeenAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ReservationDto": {
        "type": "object",
        "properties": {
          "reservationId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "slotId": {
            "type": "string"
          },
          "reservationDate": {
            "type": "string",
            "format": "date-time"
          },
          "startTime": {
            "type": "string"
          },
          "endTime": {
            "type": "string"
          },
          "durationMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "customerName": {
            "type": "string"
          },
          "customerPhone": {
            "type": "string"
          },
          "customerEmail": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "lineUserId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "customFieldsJson": {
            "type": "string"
          },
          "assignedResource": {
            "type": "string"
          },
          "customerNotes": {
            "type": "string"
          },
          "staffNotes": {
            "type": "string"
          },
          "cancellationReason": {
            "type": "string"
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "currency": {
            "type": "string"
          },
          "bookingSource": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdBy": {
            "type": "string"
          },
          "customFieldValues": {
            "type": [
              "null",
              "object"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "statusDisplayName": {
            "type": [
              "null",
              "string"
            ]
          },
          "statusBadgeClass": {
            "type": [
              "null",
              "string"
            ]
          },
          "sourceDisplayName": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "ReservationSlotDto": {
        "type": "object",
        "properties": {
          "slotId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "slotDate": {
            "type": "string",
            "format": "date-time"
          },
          "startTime": {
            "type": "string"
          },
          "endTime": {
            "type": "string"
          },
          "durationMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "capacity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "bookedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "assignedResource": {
            "type": "string"
          },
          "resourceCategory": {
            "type": "string"
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "status": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "isAvailable": {
            "type": "boolean"
          },
          "remainingCapacity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "RestockEventRequest": {
        "type": "object",
        "properties": {
          "shelfId": {
            "type": "string",
            "description": "Shelf ID where restock occurred."
          },
          "productId": {
            "type": "string",
            "description": "Product ID restocked."
          },
          "quantityAdded": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Quantity of items added during restock.",
            "format": "int32"
          },
          "staffId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Staff ID (optional)."
          }
        }
      },
      "RestockEventResponse": {
        "type": "object",
        "properties": {
          "shelfId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantityAdded": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "staffId": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "RevokeRequest": {
        "required": [
          "token",
          "clientId"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Access token or refresh token to revoke"
          },
          "clientId": {
            "type": "string",
            "description": "Client ID of the app that issued the token"
          }
        }
      },
      "SalesForecastRequest": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Store ID for which to predict sales (optional)."
          },
          "productId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Product ID or category ID (optional)."
          },
          "period": {
            "type": [
              "null",
              "string"
            ],
            "description": "Prediction period (e.g., \"7d\", \"30d\", \"12w\").",
            "example": "7d"
          }
        }
      },
      "SalesForecastResponse": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "forecastedValues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ForecastValue"
            }
          }
        }
      },
      "ScanAnalyzeResult": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "\"receipt\" | \"statement\" | \"unknown\"."
          },
          "source": {
            "type": [
              "null",
              "string"
            ],
            "description": "For statements: \"credit_card\" | \"bank\". Null otherwise."
          },
          "confidence": {
            "type": "string",
            "description": "Classification confidence: \"high\" | \"medium\" | \"low\"."
          },
          "receipt": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Populated when kind == \"receipt\".",
                "$ref": "#/components/schemas/ReceiptDto"
              }
            ]
          },
          "statement": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Populated when kind == \"statement\".",
                "$ref": "#/components/schemas/StatementAnalysisDto"
              }
            ]
          }
        }
      },
      "SchedulePostRequest": {
        "type": "object",
        "properties": {
          "scheduledAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ShelfAnalysisResponse": {
        "type": "object",
        "properties": {
          "detectedProducts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShelfProduct"
            }
          },
          "emptySections": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "totalProductsDetected": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ShelfProduct": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "facingCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "ShelfProductSlot": {
        "type": "object",
        "properties": {
          "position": {
            "type": "string",
            "description": "Slot position (e.g., \"A1\", \"B2\")."
          },
          "productId": {
            "type": "string",
            "description": "Product ID assigned to this slot."
          },
          "productName": {
            "type": "string",
            "description": "Product display name."
          },
          "stockQty": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Quantity currently in stock on this shelf.",
            "format": "int32"
          },
          "facingCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of front-facing items visible.",
            "format": "int32"
          }
        }
      },
      "ShelfRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Shelf ID. If omitted, a new shelf will be created.",
            "example": "SHF-001"
          },
          "storeId": {
            "type": "string",
            "description": "Store ID to which this shelf belongs.",
            "example": "STR-0001"
          },
          "name": {
            "type": "string",
            "description": "Display name of the shelf.",
            "example": "飲料棚A"
          },
          "rows": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of rows in the shelf layout.",
            "format": "int32"
          },
          "columns": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of columns in the shelf layout.",
            "format": "int32"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShelfProductSlot"
            },
            "description": "Product arrangement and stock data."
          }
        }
      },
      "ShelfResponse": {
        "type": "object",
        "properties": {
          "lastUpdatedAt": {
            "type": "string",
            "description": "Timestamp when the shelf was last updated.",
            "format": "date-time"
          },
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Shelf ID. If omitted, a new shelf will be created.",
            "example": "SHF-001"
          },
          "storeId": {
            "type": "string",
            "description": "Store ID to which this shelf belongs.",
            "example": "STR-0001"
          },
          "name": {
            "type": "string",
            "description": "Display name of the shelf.",
            "example": "飲料棚A"
          },
          "rows": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of rows in the shelf layout.",
            "format": "int32"
          },
          "columns": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Number of columns in the shelf layout.",
            "format": "int32"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShelfProductSlot"
            },
            "description": "Product arrangement and stock data."
          }
        }
      },
      "ShipBody": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": [
              "null",
              "string"
            ]
          },
          "trackingNumber": {
            "type": [
              "null",
              "string"
            ]
          },
          "trackingUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "shippingMethod": {
            "type": [
              "null",
              "string"
            ]
          },
          "estimatedDeliveryDate": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "ShippingAddressBody": {
        "type": "object",
        "properties": {
          "postalCode": {
            "type": [
              "null",
              "string"
            ]
          },
          "prefecture": {
            "type": [
              "null",
              "string"
            ]
          },
          "city": {
            "type": [
              "null",
              "string"
            ]
          },
          "line": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "SpecialBusinessDayDto": {
        "type": "object",
        "properties": {
          "organizationId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "openTime": {
            "type": "string"
          },
          "closeTime": {
            "type": "string"
          },
          "isClosed": {
            "type": "boolean"
          },
          "note": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "StaffDto": {
        "type": "object",
        "properties": {
          "staffId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "employeeNumber": {
            "type": "string"
          },
          "referenceId": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "firstNameKana": {
            "type": "string"
          },
          "lastNameKana": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "employmentType": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "isOwner": {
            "type": "boolean"
          },
          "phone": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "hourlyRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "hireDate": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "dateOfBirth": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "address": {
            "type": "string"
          },
          "jobAssignmentsJson": {
            "type": "string"
          },
          "isOvertimeExempt": {
            "type": "boolean"
          },
          "tipEligible": {
            "type": "boolean"
          },
          "profileImageUrl": {
            "type": "string"
          },
          "emergencyContactName": {
            "type": "string"
          },
          "emergencyContactPhone": {
            "type": "string"
          },
          "emergencyContactRelation": {
            "type": "string"
          },
          "assignedStoreIds": {
            "type": "string"
          },
          "isAssignedToAllLocations": {
            "type": "boolean"
          },
          "squareTeamMemberId": {
            "type": "string"
          },
          "smaregiStaffId": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "assignedStoreIdList": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "jobAssignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobAssignmentDto"
            }
          },
          "primaryJob": {
            "$ref": "#/components/schemas/JobAssignmentDto"
          },
          "isLinkedToUser": {
            "type": "boolean"
          },
          "fullName": {
            "type": [
              "null",
              "string"
            ]
          },
          "fullNameKana": {
            "type": [
              "null",
              "string"
            ]
          },
          "employmentTypeDisplayName": {
            "type": [
              "null",
              "string"
            ]
          },
          "employmentTypeBadgeClass": {
            "type": [
              "null",
              "string"
            ]
          },
          "statusDisplayName": {
            "type": [
              "null",
              "string"
            ]
          },
          "statusBadgeClass": {
            "type": [
              "null",
              "string"
            ]
          },
          "formattedHourlyRate": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "StatementAnalysisDto": {
        "type": "object",
        "properties": {
          "sourceDetected": {
            "type": "string"
          },
          "issuer": {
            "type": "string"
          },
          "periodStart": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "periodEnd": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StatementTransactionDto"
            }
          }
        }
      },
      "StatementImportRequest": {
        "type": "object",
        "properties": {
          "source": {
            "type": [
              "null",
              "string"
            ]
          },
          "issuer": {
            "type": [
              "null",
              "string"
            ]
          },
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StatementImportTransaction"
            }
          }
        }
      },
      "StatementImportResult": {
        "type": "object",
        "properties": {
          "savedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "duplicateCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "skippedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "failedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StatementImportRowResult"
            }
          }
        }
      },
      "StatementImportRowResult": {
        "type": "object",
        "properties": {
          "index": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "status": {
            "type": "string"
          },
          "recordedAs": {
            "type": [
              "null",
              "string"
            ]
          },
          "receiptId": {
            "type": [
              "null",
              "string"
            ]
          },
          "reason": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "StatementImportTransaction": {
        "type": "object",
        "properties": {
          "date": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "merchantName": {
            "type": "string"
          },
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "matchedStoreId": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "StatementTransactionDto": {
        "type": "object",
        "properties": {
          "date": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "merchantName": {
            "type": "string"
          },
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "type": {
            "type": "string"
          },
          "matchedStoreId": {
            "type": [
              "null",
              "string"
            ]
          },
          "confidence": {
            "type": "string"
          }
        }
      },
      "StoreHourEntry": {
        "type": "object",
        "properties": {
          "day": {
            "type": "string"
          },
          "isClosed": {
            "type": "boolean"
          },
          "ranges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StoreHourRange"
            }
          }
        }
      },
      "StoreHourRange": {
        "type": "object",
        "properties": {
          "open": {
            "type": "string"
          },
          "close": {
            "type": "string"
          }
        }
      },
      "StoreLinkCandidateDto": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "prefecture": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "score": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "StoreLinkConfidence": {
        "enum": [
          "None",
          "Low",
          "High"
        ]
      },
      "StoreLinkResultDto": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "confidence": {
            "$ref": "#/components/schemas/StoreLinkConfidence"
          },
          "matchedOn": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "snapshot": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/StoreLinkSnapshot"
              }
            ]
          },
          "candidates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StoreLinkCandidateDto"
            }
          }
        }
      },
      "StoreLinkSnapshot": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "storeType": {
            "type": "string"
          },
          "storeTypeDisplay": {
            "type": "string"
          },
          "prefecture": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "addressLine1": {
            "type": "string"
          },
          "phoneNumber": {
            "type": "string"
          }
        }
      },
      "StorePriceDto": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "costPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "StoreRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Unique store identifier (auto-generated if omitted).\nTypically prefixed with `STR-`.",
            "example": "STR-0001"
          },
          "name": {
            "type": "string",
            "description": "Official store name as displayed to customers.\nMust be between 1–100 characters.",
            "example": "ReceiptRoller Shibuya"
          },
          "address": {
            "type": "string",
            "description": "Physical address or registered business location.\nThis field is used for geolocation and analytics grouping.",
            "example": "1-1-1 Shibuya, Tokyo, Japan"
          },
          "openHours": {
            "type": "string",
            "description": "Store operating hours in local time.\nOptional but recommended for consumer-facing apps and delivery logic.",
            "example": "09:00–22:00"
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Latitude coordinate (WGS84).\nUse decimal degrees; valid range is -90.0 to 90.0.",
            "format": "double",
            "example": 35.6595
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Longitude coordinate (WGS84).\nUse decimal degrees; valid range is -180.0 to 180.0.",
            "format": "double",
            "example": 139.7005
          }
        },
        "description": "Request model used to register or update store information."
      },
      "StoreResponse": {
        "type": "object",
        "properties": {
          "updatedAt": {
            "type": "string",
            "description": "UTC timestamp indicating when the store record was last updated.",
            "format": "date-time",
            "example": "2025-11-11T09:42:00Z"
          },
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Unique store identifier (auto-generated if omitted).\nTypically prefixed with `STR-`.",
            "example": "STR-0001"
          },
          "name": {
            "type": "string",
            "description": "Official store name as displayed to customers.\nMust be between 1–100 characters.",
            "example": "ReceiptRoller Shibuya"
          },
          "address": {
            "type": "string",
            "description": "Physical address or registered business location.\nThis field is used for geolocation and analytics grouping.",
            "example": "1-1-1 Shibuya, Tokyo, Japan"
          },
          "openHours": {
            "type": "string",
            "description": "Store operating hours in local time.\nOptional but recommended for consumer-facing apps and delivery logic.",
            "example": "09:00–22:00"
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Latitude coordinate (WGS84).\nUse decimal degrees; valid range is -90.0 to 90.0.",
            "format": "double",
            "example": 35.6595
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Longitude coordinate (WGS84).\nUse decimal degrees; valid range is -180.0 to 180.0.",
            "format": "double",
            "example": 139.7005
          }
        },
        "description": "Response model returned after store registration, update, or lookup."
      },
      "StoreTrafficResponse": {
        "type": "object",
        "properties": {
          "peopleCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "density": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "recommendedStaffCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "StringSegment": {
        "type": "object",
        "properties": {
          "buffer": {
            "type": [
              "null",
              "string"
            ]
          },
          "offset": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "length": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "value": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasValue": {
            "type": "boolean"
          }
        }
      },
      "SubmitSurveyRequest": {
        "required": [
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "answers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SurveyAnswerInput"
            }
          },
          "deviceId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Required when the caller is anonymous — used for response dedup."
          }
        }
      },
      "SurveyAnswerInput": {
        "type": "object",
        "properties": {
          "questionId": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        }
      },
      "SurveyCampaignPreviewResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "campaign": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/SurveyCampaignResponse"
              }
            ]
          },
          "questions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SurveyQuestionResponse"
            }
          }
        }
      },
      "SurveyCampaignResponse": {
        "type": "object",
        "properties": {
          "campaignId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "validFrom": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "validUntil": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "isAnonymous": {
            "type": "boolean"
          },
          "maxResponsesPerUser": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "hasReward": {
            "type": "boolean"
          }
        }
      },
      "SurveyEmbed": {
        "type": "object",
        "properties": {
          "campaignId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "hasReward": {
            "type": "boolean"
          }
        }
      },
      "SurveyQuestionResponse": {
        "type": "object",
        "properties": {
          "questionId": {
            "type": "string"
          },
          "order": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "type": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "isRequired": {
            "type": "boolean"
          },
          "optionsJson": {
            "type": "string"
          },
          "minValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "maxValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "SurveySubmitResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "completedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "couponIssuedId": {
            "type": [
              "null",
              "string"
            ]
          },
          "campaign": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/SurveyCampaignResponse"
              }
            ]
          },
          "validationErrors": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "SyncResponse": {
        "type": "object",
        "properties": {
          "channelId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "startedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TargetingCriteria": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "description": "Target region (e.g., city or prefecture).",
            "example": "Tokyo"
          },
          "gender": {
            "type": "string",
            "description": "Target gender (male, female, or all).",
            "example": "female"
          },
          "ageRange": {
            "type": "string",
            "description": "Target age range.",
            "example": "20-40"
          }
        },
        "description": "Targeting settings for an ad campaign."
      },
      "TemplateBlock": {
        "type": "object",
        "properties": {
          "templateId": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "resolvedJson": {
            "type": "string",
            "description": "Stringified JSON containing the merged template manifest +\ntheme + navigation. Clients deserialize this once on app load."
          }
        }
      },
      "ThemeBlock": {
        "type": "object",
        "properties": {
          "primary": {
            "type": "string"
          },
          "accent": {
            "type": "string"
          },
          "background": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        }
      },
      "ToggleSyncRequest": {
        "type": "object",
        "properties": {
          "enable": {
            "type": "boolean",
            "description": "True to enable automatic sync, false to disable."
          }
        }
      },
      "TokenInfoResponse": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          },
          "clientId": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TokenResponse": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string",
            "description": "Bearer access token for API calls"
          },
          "refresh_token": {
            "type": [
              "null",
              "string"
            ],
            "description": "Refresh token for obtaining new access tokens"
          },
          "token_type": {
            "type": "string",
            "description": "Token type (always Bearer)"
          },
          "expires_in": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Expiration time in seconds",
            "format": "int32"
          },
          "scope": {
            "type": "string",
            "description": "Authorized scopes (space-separated)"
          }
        }
      },
      "TransactionQrClaimRequest": {
        "type": "object",
        "properties": {
          "channel": {
            "type": "string",
            "description": "line / ios / android / web / email"
          },
          "userId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional — authenticated RR user id if the client knows one."
          },
          "deliveryTarget": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional — delivery target (email / LINE userId) when channel demands one."
          }
        }
      },
      "TransactionQrClaimResponse": {
        "type": "object",
        "properties": {
          "claimId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "deliveryChannel": {
            "type": "string"
          }
        }
      },
      "TransactionQrReceiptResponse": {
        "type": "object",
        "properties": {
          "claimToken": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "terminalId": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "transaction": {
            "$ref": "#/components/schemas/ReceiptSummary"
          },
          "survey": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Optional survey CTA the receipt UI should render. Null when no\nactive campaign matches the transaction's targeting rules — the\nclient just hides the section.",
                "$ref": "#/components/schemas/SurveyEmbed"
              }
            ]
          }
        }
      },
      "UnregisterTokenRequest": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "deviceId": {
            "type": "string"
          }
        }
      },
      "UpdateWebhookRequest": {
        "type": "object",
        "properties": {
          "eventTypes": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Replaces the full list of subscribed event types.\nMust contain at least one event if provided.",
            "example": [
              "receipt.created"
            ]
          },
          "active": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Set to false to pause delivery without deleting the webhook.\nSet to true to resume.",
            "example": false
          }
        },
        "description": "Request body for updating an existing webhook."
      },
      "UpgradeRequest": {
        "required": [
          "email",
          "password"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "displayName": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "UserCheckInItem": {
        "type": "object",
        "properties": {
          "checkInId": {
            "type": "string"
          },
          "campaignId": {
            "type": "string"
          },
          "campaignName": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "checkedInAt": {
            "type": "string",
            "format": "date-time"
          },
          "method": {
            "type": "string"
          }
        }
      },
      "UserCheckInListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserCheckInItem"
            }
          },
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "UserCouponItem": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string"
          },
          "storeName": {
            "type": "string"
          },
          "couponId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "discountType": {
            "type": "string"
          },
          "discountValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "validFrom": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "validUntil": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "isExpired": {
            "type": "boolean"
          },
          "isFullyUsed": {
            "type": "boolean"
          }
        }
      },
      "UserDeviceResponse": {
        "type": "object",
        "properties": {
          "deviceId": {
            "type": "string"
          },
          "platform": {
            "type": "string"
          },
          "registeredAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastSeenAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UserSurveyItem": {
        "type": "object",
        "properties": {
          "responseId": {
            "type": "string"
          },
          "campaignId": {
            "type": "string"
          },
          "storeId": {
            "type": "string"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time"
          },
          "couponIssuedId": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "UserSurveyListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserSurveyItem"
            }
          },
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "VariantOptionDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "VerifyRequest": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string",
            "description": "Access token to validate"
          }
        }
      },
      "WalletPushResponse": {
        "type": "object",
        "properties": {
          "pushed": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "WebhookCreatedDto": {
        "type": "object",
        "properties": {
          "secret": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "clientId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string",
            "format": "uuid"
          },
          "url": {
            "type": "string"
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "active": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastDeliveredAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "WebhookDeliveryLogDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "webhookId": {
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "httpStatus": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "success": {
            "type": "boolean"
          },
          "attemptCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "errorMessage": {
            "type": [
              "null",
              "string"
            ]
          },
          "attemptedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebhookDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "clientId": {
            "type": "string"
          },
          "organizationId": {
            "type": "string",
            "format": "uuid"
          },
          "url": {
            "type": "string"
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "active": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastDeliveredAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "WebhookTestResult": {
        "type": "object",
        "properties": {
          "webhookId": {
            "type": "string",
            "description": "The webhook ID the test was sent to.",
            "example": "wh_aBcDeFgHiJkLmNoP"
          },
          "httpStatus": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "HTTP status code returned by your endpoint (0 = connection failed).",
            "format": "int32",
            "example": 200
          },
          "success": {
            "type": "boolean",
            "description": "True if the endpoint responded with a 2xx status.",
            "example": true
          },
          "deliveredAt": {
            "type": "string",
            "description": "UTC timestamp of the delivery attempt.",
            "format": "date-time",
            "example": "2026-04-14T09:00:01Z"
          }
        },
        "description": "Result of a test ping delivery."
      },
      "WorkHoursLimitRequest": {
        "type": "object",
        "properties": {
          "standardWorkStartTime": {
            "type": [
              "null",
              "string"
            ],
            "description": "\"HH:mm\" 24h, or empty to clear the limit."
          },
          "standardWorkEndTime": {
            "type": [
              "null",
              "string"
            ],
            "description": "\"HH:mm\" 24h, or empty to clear the limit."
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "ShopifyWebhook"
    },
    {
      "name": "NotificationTokenApi"
    },
    {
      "name": "PublicStoreDirectory"
    },
    {
      "name": "QrImageApi"
    },
    {
      "name": "StoreAppApi"
    },
    {
      "name": "TerminalReceiptApi"
    },
    {
      "name": "TransactionReceiptApi"
    },
    {
      "name": "WalletPassApi"
    },
    {
      "name": "CheckInApi"
    },
    {
      "name": "SurveyApi"
    },
    {
      "name": "UserAccount"
    },
    {
      "name": "UserBudget"
    },
    {
      "name": "UserCoupons"
    },
    {
      "name": "UserDevices"
    },
    {
      "name": "UserFavoriteStores"
    },
    {
      "name": "UserFlyers"
    },
    {
      "name": "UserIncome"
    },
    {
      "name": "UserReceipts"
    },
    {
      "name": "UserScan"
    },
    {
      "name": "UserStatements"
    },
    {
      "name": "AIForecast"
    },
    {
      "name": "BusinessHoursApi"
    },
    {
      "name": "ChatSupport"
    },
    {
      "name": "CouponCampaigns"
    },
    {
      "name": "CouponGroups"
    },
    {
      "name": "CouponRedemptions"
    },
    {
      "name": "Coupons"
    },
    {
      "name": "Customers"
    },
    {
      "name": "DisplaysApi"
    },
    {
      "name": "EcommerceChannels"
    },
    {
      "name": "EcommerceProducts"
    },
    {
      "name": "InventoryApi"
    },
    {
      "name": "LineWebhook"
    },
    {
      "name": "Ocr"
    },
    {
      "name": "OrdersApi"
    },
    {
      "name": "ProductsApi"
    },
    {
      "name": "Receipts"
    },
    {
      "name": "ReservationsApi"
    },
    {
      "name": "SalesApi"
    },
    {
      "name": "Shelves"
    },
    {
      "name": "SmaregiWebhook"
    },
    {
      "name": "SnsApi"
    },
    {
      "name": "SnsCrmApi"
    },
    {
      "name": "SquareWebhook"
    },
    {
      "name": "StaffApi"
    },
    {
      "name": "StoreFlyersApi"
    },
    {
      "name": "TransactionsApi"
    },
    {
      "name": "MasterData"
    },
    {
      "name": "Stores"
    },
    {
      "name": "CreativeApi"
    },
    {
      "name": "Auth"
    },
    {
      "name": "Me"
    },
    {
      "name": "StripeWebhook"
    },
    {
      "name": "Webhooks"
    },
    {
      "name": "AdCampaigns"
    },
    {
      "name": "AdContents"
    },
    {
      "name": "AdGroups"
    },
    {
      "name": "Ads"
    },
    {
      "name": "AdServerCallback"
    },
    {
      "name": "AdServer"
    },
    {
      "name": "AdSpaces"
    }
  ]
}