{
  "openapi": "3.0.1",
  "info": {
    "title": "Nesika Public Engine API",
    "description": "Reference for the Nesika Public Engine API: product pricing and comparison operations, the authenticated caller's own account data, and developer-account management.\n\nAuthentication is declared per operation. Pricing and comparison operations under `/api/v1` require an engine-scoped developer API key in the `X-API-Key` header. Workspace account-data operations under `/api/v1/me/*` accept either a workspace API key in the `X-API-Key` header or an Azure AD (Entra) bearer token in the `Authorization` header, except `/api/v1/me/usage`, which is API-key-only and requires an engine-scoped developer API key. Developer-account and engine-key management operations under `/api/developer` require Azure AD (Entra) bearer authentication; the identity-challenge and signup operations are anonymous.\n\nMetered pricing operations enforce a per-plan monthly quota; exhausting it returns **402 Payment Required**. Independently, requests are rate-limited per minute, and exceeding that limit returns **429 Too Many Requests** with headers describing the current rate-limit state.\n\nThe Explorer tier has no monthly data-point allowance: new developer account registration makes one attempt to grant 1,000 signup credits into the prepaid credit ledger. The signup grant does not renew monthly and is not automatically retried or backfilled; failed grants require manual remediation. Existing developer accounts are unchanged. Every Explorer call is funded from prepaid credits. For these credits-funded callers, `GET /api/v1/me/usage` reports `usedUnits` as lifetime (not cycle-scoped) credit consumption, `remainingUnits` as the spendable prepaid balance, and `quotaUnits` as `null` (no periodic ceiling applies); see the `credits` block for the full prepaid ledger detail.\n\nInternal Web API, system-administration, diagnostic, webhook, and authentication-callback endpoints are excluded.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://nesika-ase-dev-webapi-dev.azurewebsites.net/"
    }
  ],
  "paths": {
    "/api/developer/identity/challenge": {
      "post": {
        "tags": [
          "DeveloperAccounts"
        ],
        "summary": "Issue an email identity challenge (one-time code / magic link) for self-serve signup.\nThe one-time code is delivered out of band and never returned in the response.",
        "description": "Returns 501 when no transactional email provider is wired (the default). Previously this\nreturned 200 with \"a verification code has been sent\" even though the default sender\ndelivers nothing, leaving the developer waiting for an email that would never arrive.\nThe supported self-serve route is the developer JWT path used by the developer portal:\nsign in, then POST /api/developer/signup with no challengeId/code.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperIdentityChallengeRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperIdentityChallengeRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperIdentityChallengeRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperIdentityChallengeResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperIdentityChallengeResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperIdentityChallengeResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented"
          }
        }
      }
    },
    "/api/developer/signup": {
      "post": {
        "tags": [
          "DeveloperAccounts"
        ],
        "summary": "Complete self-serve signup and create (or return) the developer account and hidden\nworkspace. Supports two identity modes: one-time-code (challengeId + code) or a developer\nJWT (Entra External ID). No customer workspace or membership is required.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperSignupRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperSignupRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperSignupRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/developer/account": {
      "get": {
        "tags": [
          "DeveloperAccounts"
        ],
        "summary": "Get the developer account for the authenticated developer JWT. Returns 404 if the caller\nhas not completed signup.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/developer/keys": {
      "post": {
        "tags": [
          "DeveloperApiKeys"
        ],
        "summary": "Create a new engine-scope key. The raw key is returned only once. Requires an active\ndeveloper account that has accepted terms.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreateDeveloperApiKeyRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreateDeveloperApiKeyRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreateDeveloperApiKeyRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfApiKeyGenerationResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfApiKeyGenerationResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfApiKeyGenerationResultDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "DeveloperApiKeys"
        ],
        "summary": "List the developer's engine-scope keys (without raw key values).",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfSystem.Collections.Generic.IEnumerableOfApiKeyDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfSystem.Collections.Generic.IEnumerableOfApiKeyDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfSystem.Collections.Generic.IEnumerableOfApiKeyDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/developer/keys/{keyId}/rotate": {
      "post": {
        "tags": [
          "DeveloperApiKeys"
        ],
        "summary": "Rotate an engine-scope key: revoke the old one and issue a new one with the same name.",
        "parameters": [
          {
            "name": "keyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfApiKeyGenerationResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfApiKeyGenerationResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfApiKeyGenerationResultDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/developer/keys/{keyId}": {
      "delete": {
        "tags": [
          "DeveloperApiKeys"
        ],
        "summary": "Revoke (soft delete) an engine-scope key.",
        "parameters": [
          {
            "name": "keyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfString"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfString"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfString"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/developer/credits/packs": {
      "get": {
        "tags": [
          "DeveloperCredits"
        ],
        "summary": "Returns the purchasable credit pack catalog with derived per-data-point rates.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditPackCatalogDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditPackCatalogDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditPackCatalogDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/developer/credits/balance": {
      "get": {
        "tags": [
          "DeveloperCredits"
        ],
        "summary": "Returns the developer's prepaid balance together with any applicable plan quota, so the UI can\nrender one coherent \"what can I spend\" picture.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditBalanceDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditBalanceDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditBalanceDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/developer/credits/purchases/{checkoutSessionId}": {
      "get": {
        "tags": [
          "DeveloperCredits"
        ],
        "summary": "Reports whether a specific Stripe checkout session has been credited to the caller's account.\nThe portal polls this after returning from Checkout so it can say \"your credits are here\" only\nwhen THAT payment has actually landed, rather than inferring it from a moving aggregate.",
        "parameters": [
          {
            "name": "checkoutSessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditPurchaseConfirmationDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditPurchaseConfirmationDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditPurchaseConfirmationDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/developer/credits/checkout": {
      "post": {
        "tags": [
          "DeveloperCredits"
        ],
        "summary": "Starts a one-time Stripe Checkout session for a credit pack. Data points are credited only when\nthe payment settles and Stripe delivers a verified `checkout.session.completed` webhook.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreateCreditCheckoutRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreateCreditCheckoutRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreateCreditCheckoutRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditCheckoutSessionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditCheckoutSessionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.Common.ApiResponseOfCreditCheckoutSessionDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/commerce/search-products": {
      "post": {
        "tags": [
          "Commerce"
        ],
        "summary": "Searches retailer product candidates through the Commerce engine.",
        "description": "Deterministic, real-time discovery across retailer sites for the given\nfree-text query -- results are produced by live discovery per request, not\nby querying a pre-indexed/cached retailer listing database; no\ngenerative/LLM reasoning is used. Costs a fixed 5 data points per\ncall, charged on the HTTP status returned. If the request replays a prior\ncall via the same `Idempotency-Key` (see below), the stored response is\nreturned and no additional data points are consumed - a replay is always free.\n\nThe `budget` field is optional. Omit it to use the documented defaults on\n`CommerceWorkBudgetDto` (max_results=20, max_candidates=12, max_merchants=6,\nmax_pages=12, max_extractions=8, deadline_seconds=540); an explicit\n`\"budget\": null` is rejected as a validation error rather than silently\nsubstituted with defaults.\n\n**Asynchronous jobs.** Send `Prefer: respond-async` to run the call as a job instead of\nwaiting for it. The answer is `202 Accepted` with a job envelope, a `Location` header and\n`Retry-After: 5`. Poll `GET /api/v1/commerce/jobs/{job_id}` for the result; polling is free.\nThe data points are held at submission, charged once when the job succeeds, and returned\nwhen it fails. A caller without enough data points gets `402` before any job exists.\n\nAdd `wait=N`, for example `Prefer: respond-async, wait=20`, to keep the request open for up\nto N seconds (at most 25). Waiting adds at most N + 2 seconds to the reply. A job that\nfinishes in that time is answered exactly like the synchronous call, without\n`Preference-Applied`. Otherwise the `202` follows. A job answered inline still sends its callback, if it has one,\nso the result can arrive twice; discard the repeat by its `Nesika-Delivery-Id`.\n\nAdd `callback_url` to the body to have the finished job POSTed to that URL. The jobs route\ndescribes the payload and its headers.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Prefer",
            "in": "header",
            "description": "Send `respond-async` to run the call as an asynchronous job (RFC 7240). Add `wait=N`, from 0 to 25 seconds, to wait inline for a job that finishes quickly.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async, wait=0"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSearchProductsRequestDto"
              },
              "examples": {
                "request": {
                  "summary": "Search for a product",
                  "value": {
                    "market": "AU",
                    "query": "coffee beans 1kg",
                    "budget": {
                      "max_results": 20,
                      "max_candidates": 12,
                      "max_merchants": 6,
                      "max_pages": 12,
                      "max_extractions": 8,
                      "deadline_seconds": 540
                    }
                  }
                }
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSearchProductsRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSearchProductsRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfObject"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSearchProductsResponseDto"
                },
                "examples": {
                  "success": {
                    "summary": "Matched retailer candidates",
                    "value": {
                      "status": "complete",
                      "market": "AU",
                      "failures": [ ],
                      "candidates": [
                        {
                          "merchant_id": "store-a",
                          "merchant_name": "Store A",
                          "serp_rank": 6,
                          "title": "Acme Coffee Beans 1kg",
                          "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                          "identity": null,
                          "representative_offer": {
                            "merchant_id": "store-a",
                            "merchant_name": "Store A",
                            "product_name": "Acme Coffee Beans 1kg",
                            "product_url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                            "canonical_id": null,
                            "price": {
                              "status": "extracted",
                              "value": 24.99,
                              "currency": "AUD"
                            },
                            "stock": {
                              "status": "not_extracted",
                              "value": null,
                              "currency": null
                            },
                            "shipping": {
                              "status": "unsupported",
                              "value": null,
                              "currency": null
                            },
                            "identity_confidence": {
                              "status": "unsupported",
                              "score": null,
                              "matching_type": null,
                              "basis": "discovery_no_identity"
                            },
                            "constraints": {
                              "merchant": "unsupported",
                              "category": "unsupported",
                              "price": "unsupported"
                            },
                            "evidence": [
                              {
                                "kind": "search_result",
                                "merchant_id": "store-a",
                                "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                "rank": 6,
                                "field": "title",
                                "value": "Acme Coffee Beans 1kg"
                              },
                              {
                                "kind": "search_result",
                                "merchant_id": "store-a",
                                "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                "rank": 6,
                                "field": "url_kind",
                                "value": "discovery_redirect_not_seller_page"
                              },
                              {
                                "kind": "search_result",
                                "merchant_id": "store-a",
                                "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                "rank": 6,
                                "field": "discovery_price",
                                "value": 24.99
                              }
                            ]
                          },
                          "extraction_probability": {
                            "status": "not_extracted",
                            "value": null,
                            "currency": null
                          },
                          "constraints": {
                            "merchant": "unsupported",
                            "category": "unsupported",
                            "price": "unsupported"
                          },
                          "evidence": [
                            {
                              "kind": "search_result",
                              "merchant_id": "store-a",
                              "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                              "rank": 6,
                              "field": "title",
                              "value": "Acme Coffee Beans 1kg"
                            },
                            {
                              "kind": "search_result",
                              "merchant_id": "store-a",
                              "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                              "rank": 6,
                              "field": "url_kind",
                              "value": "discovery_redirect_not_seller_page"
                            },
                            {
                              "kind": "search_result",
                              "merchant_id": "store-a",
                              "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                              "rank": 6,
                              "field": "discovery_price",
                              "value": 24.99
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceJobDto"
                },
                "examples": {
                  "success": {
                    "summary": "Accepted as a job",
                    "value": {
                      "job_id": "job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "status": "pending",
                      "operation": "search_products",
                      "poll_url": "/api/v1/commerce/jobs/job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "submitted_at": "2026-09-14T04:11:03Z",
                      "expires_at": "2026-09-15T04:11:03Z",
                      "callback_registered": false,
                      "error": null,
                      "poll_after_ms": 5000,
                      "result": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/v1/commerce/resolve-product": {
      "post": {
        "tags": [
          "Commerce"
        ],
        "summary": "Resolves a supplied product description to a canonical identity.",
        "description": "Matching is deterministic exact-identifier matching only: a shared GTIN, or\na merchant product id within the same merchant scope. No SKU, barcode,\ntitle, or model semantic/fuzzy matching is ever performed, and no\ngenerative/LLM comparison or semantic guessing is used. Ambiguity is\npossible: if multiple candidates share an identifier and cannot be\ndistinguished, the response `status` is `ambiguous` and candidates are\nreturned in `alternatives` with `ambiguity_notes` explaining why. The\nreturned `canonical_id` identifies this resolved identity for the duration\nof the response only; it is not guaranteed to be a globally persisted\ncanonical product id and may differ between independent resolve calls for\nthe same real-world product.\n\nCosts a fixed 3 data points per call, charged on the HTTP status returned.\nA replay of a prior call via the same `Idempotency-Key` returns the stored\nresponse and consumes no additional data points.\n\nThe `budget` field is optional; see `search-products` for the documented\ndefaults applied when it is omitted. An explicit `\"budget\": null` is\nrejected as a validation error.\n\n**Asynchronous jobs.** Send `Prefer: respond-async` to run the call as a job instead of\nwaiting for it. The answer is `202 Accepted` with a job envelope, a `Location` header and\n`Retry-After: 5`. Poll `GET /api/v1/commerce/jobs/{job_id}` for the result; polling is free.\nThe data points are held at submission, charged once when the job succeeds, and returned\nwhen it fails. A caller without enough data points gets `402` before any job exists.\n\nAdd `wait=N`, for example `Prefer: respond-async, wait=20`, to keep the request open for up\nto N seconds (at most 25). Waiting adds at most N + 2 seconds to the reply. A job that\nfinishes in that time is answered exactly like the synchronous call, without\n`Preference-Applied`. Otherwise the `202` follows. A job answered inline still sends its callback, if it has one,\nso the result can arrive twice; discard the repeat by its `Nesika-Delivery-Id`.\n\nAdd `callback_url` to the body to have the finished job POSTed to that URL. The jobs route\ndescribes the payload and its headers.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Prefer",
            "in": "header",
            "description": "Send `respond-async` to run the call as an asynchronous job (RFC 7240). Add `wait=N`, from 0 to 25 seconds, to wait inline for a job that finishes quickly.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async, wait=0"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceResolveProductRequestDto"
              },
              "examples": {
                "request": {
                  "summary": "Resolve a product by GTIN",
                  "value": {
                    "market": "AU",
                    "title": "Acme Coffee Beans 1kg",
                    "gtin": "12345678",
                    "budget": {
                      "max_results": 20,
                      "max_candidates": 12,
                      "max_merchants": 6,
                      "max_pages": 12,
                      "max_extractions": 8,
                      "deadline_seconds": 540
                    }
                  }
                }
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceResolveProductRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceResolveProductRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfObject"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceResolveProductResponseDto"
                },
                "examples": {
                  "success": {
                    "summary": "Resolved canonical identity",
                    "value": {
                      "status": "complete",
                      "market": "AU",
                      "failures": [ ],
                      "identity": {
                        "canonical_id": "store-a_SKU-1",
                        "canonical_name": "Acme Coffee Beans 1kg",
                        "canonical_url": "https://store.example/coffee-beans-1kg",
                        "variant": "1kg",
                        "identifiers": {
                          "product_id": "sku-1",
                          "product_id_source": "sku",
                          "sku": "sku-1",
                          "mpn": null,
                          "gtins": [
                            "12345678"
                          ]
                        },
                        "matching_attributes": {
                          "brand": "Acme",
                          "model": null,
                          "weight": "1",
                          "weight_unit": "kg",
                          "volume": null,
                          "volume_unit": null,
                          "quantity": null,
                          "variant": "1kg",
                          "color": null,
                          "size": null,
                          "material": null,
                          "style": null,
                          "category": "coffee"
                        },
                        "confidence": {
                          "status": "supported",
                          "score": 100,
                          "matching_type": "Perfect_Match",
                          "basis": "exact_gtin"
                        },
                        "evidence": [
                          {
                            "kind": "search_result",
                            "merchant_id": "store-a",
                            "url": "https://store.example/coffee-beans-1kg",
                            "rank": 1,
                            "field": "title",
                            "value": "Acme Coffee Beans 1kg"
                          },
                          {
                            "kind": "product_page",
                            "merchant_id": "store-a",
                            "url": "https://store.example/coffee-beans-1kg",
                            "rank": null,
                            "field": null,
                            "value": null
                          },
                          {
                            "kind": "extracted_field",
                            "merchant_id": "store-a",
                            "url": "https://store.example/coffee-beans-1kg",
                            "rank": null,
                            "field": "price",
                            "value": 24.99
                          },
                          {
                            "kind": "extracted_field",
                            "merchant_id": "store-a",
                            "url": "https://store.example/coffee-beans-1kg",
                            "rank": null,
                            "field": "availability",
                            "value": "InStock"
                          }
                        ]
                      },
                      "alternatives": [ ],
                      "ambiguity_notes": [ ]
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceJobDto"
                },
                "examples": {
                  "success": {
                    "summary": "Accepted as a job",
                    "value": {
                      "job_id": "job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "status": "pending",
                      "operation": "resolve_product",
                      "poll_url": "/api/v1/commerce/jobs/job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "submitted_at": "2026-09-14T04:11:03Z",
                      "expires_at": "2026-09-15T04:11:03Z",
                      "callback_registered": false,
                      "error": null,
                      "poll_after_ms": 5000,
                      "result": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/v1/commerce/find-offers": {
      "post": {
        "tags": [
          "Commerce"
        ],
        "summary": "Finds retailer offers for a product identity.",
        "description": "Returns known retailer offers for the supplied product identity using\ndeterministic identifier/listing matching; no generative/LLM reasoning is\nused. Costs a fixed 5 data points per call, charged on the HTTP status\nreturned. A replay of a prior call via the same `Idempotency-Key` returns\nthe stored response and consumes no additional data points.\n\nThe `budget` field is optional; see `search-products` for the documented\ndefaults applied when it is omitted. An explicit `\"budget\": null` is\nrejected as a validation error.\n\n**Asynchronous jobs.** Send `Prefer: respond-async` to run the call as a job instead of\nwaiting for it. The answer is `202 Accepted` with a job envelope, a `Location` header and\n`Retry-After: 5`. Poll `GET /api/v1/commerce/jobs/{job_id}` for the result; polling is free.\nThe data points are held at submission, charged once when the job succeeds, and returned\nwhen it fails. A caller without enough data points gets `402` before any job exists.\n\nAdd `wait=N`, for example `Prefer: respond-async, wait=20`, to keep the request open for up\nto N seconds (at most 25). Waiting adds at most N + 2 seconds to the reply. A job that\nfinishes in that time is answered exactly like the synchronous call, without\n`Preference-Applied`. Otherwise the `202` follows. A job answered inline still sends its callback, if it has one,\nso the result can arrive twice; discard the repeat by its `Nesika-Delivery-Id`.\n\nAdd `callback_url` to the body to have the finished job POSTed to that URL. The jobs route\ndescribes the payload and its headers.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Prefer",
            "in": "header",
            "description": "Send `respond-async` to run the call as an asynchronous job (RFC 7240). Add `wait=N`, from 0 to 25 seconds, to wait inline for a job that finishes quickly.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async, wait=0"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceFindOffersRequestDto"
              },
              "examples": {
                "request": {
                  "summary": "Find offers for a known product",
                  "value": {
                    "market": "AU",
                    "identity": {
                      "canonical_id": "store-a_SKU-1",
                      "canonical_name": "Acme Coffee Beans 1kg",
                      "variant": "1kg",
                      "model": null,
                      "sku": "sku-1",
                      "barcode": null,
                      "gtin": "12345678",
                      "brand": "Acme",
                      "description": "Medium roast whole bean coffee",
                      "source_url": "https://store.example.com/coffee-beans-1kg"
                    },
                    "merchant_ids": [
                      "store-a"
                    ],
                    "budget": {
                      "max_results": 20,
                      "max_candidates": 12,
                      "max_merchants": 6,
                      "max_pages": 12,
                      "max_extractions": 8,
                      "deadline_seconds": 540
                    }
                  }
                }
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceFindOffersRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceFindOffersRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfObject"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceFindOffersResponseDto"
                },
                "examples": {
                  "success": {
                    "summary": "Retailer offers",
                    "value": {
                      "status": "complete",
                      "market": "AU",
                      "failures": [ ],
                      "identity": {
                        "canonical_id": "store-a_SKU-1",
                        "canonical_name": "Acme Coffee Beans 1kg",
                        "variant": "1kg",
                        "model": null,
                        "sku": "sku-1",
                        "barcode": null,
                        "gtin": "12345678",
                        "brand": "Acme",
                        "description": "Medium roast whole bean coffee",
                        "source_url": "https://store.example.com/coffee-beans-1kg"
                      },
                      "offers": [
                        {
                          "merchant_id": "store-a",
                          "merchant_name": "Store A",
                          "product_name": "Acme Coffee Beans 1kg",
                          "product_url": "https://store.example.com/coffee-beans-1kg",
                          "canonical_id": "store-a_SKU-1",
                          "price": {
                            "status": "extracted",
                            "value": 24.99,
                            "currency": "AUD"
                          },
                          "stock": {
                            "status": "extracted",
                            "value": "InStock",
                            "currency": null
                          },
                          "shipping": {
                            "status": "unsupported",
                            "value": null,
                            "currency": null
                          },
                          "identity_confidence": {
                            "status": "supported",
                            "score": 100,
                            "matching_type": "Perfect_Match",
                            "basis": "exact_gtin"
                          },
                          "constraints": {
                            "merchant": "satisfied",
                            "category": "unsupported",
                            "price": "unsupported"
                          },
                          "evidence": [
                            {
                              "kind": "search_result",
                              "merchant_id": "store-a",
                              "url": "https://store.example.com/coffee-beans-1kg",
                              "rank": 1,
                              "field": "title",
                              "value": "Acme Coffee Beans 1kg"
                            },
                            {
                              "kind": "product_page",
                              "merchant_id": "store-a",
                              "url": "https://store.example.com/coffee-beans-1kg",
                              "rank": null,
                              "field": null,
                              "value": null
                            },
                            {
                              "kind": "extracted_field",
                              "merchant_id": "store-a",
                              "url": "https://store.example.com/coffee-beans-1kg",
                              "rank": null,
                              "field": "price",
                              "value": 24.99
                            },
                            {
                              "kind": "extracted_field",
                              "merchant_id": "store-a",
                              "url": "https://store.example.com/coffee-beans-1kg",
                              "rank": null,
                              "field": "availability",
                              "value": "InStock"
                            }
                          ]
                        }
                      ],
                      "ambiguity_notes": [ ]
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceJobDto"
                },
                "examples": {
                  "success": {
                    "summary": "Accepted as a job",
                    "value": {
                      "job_id": "job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "status": "pending",
                      "operation": "find_offers",
                      "poll_url": "/api/v1/commerce/jobs/job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "submitted_at": "2026-09-14T04:11:03Z",
                      "expires_at": "2026-09-15T04:11:03Z",
                      "callback_registered": false,
                      "error": null,
                      "poll_after_ms": 5000,
                      "result": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/v1/commerce/deep-search": {
      "post": {
        "tags": [
          "Commerce"
        ],
        "summary": "Performs bounded deep product research across retailers.",
        "description": "Runs the same bounded, provider-neutral merchant/offer discovery as\n`find-offers`, seeded from a free-text `query`, a known `product` identity,\nor both (at least one is required). It uses the same default work budget as\n`find-offers` - deep search does not run under a larger budget or invoke any\nextra generative/LLM reasoning; \"deep\" refers to broader merchant discovery\nwithin the same bounded budget, not additional AI processing.\n\nCosts a fixed 10 data points per call, charged on the HTTP status returned.\nA replay of a prior call via the same `Idempotency-Key` returns the stored\nresponse and consumes no additional data points.\n\nThe `budget` field is optional; see `search-products` for the documented\ndefaults applied when it is omitted. An explicit `\"budget\": null` is\nrejected as a validation error.\n\n**Asynchronous jobs.** Send `Prefer: respond-async` to run the call as a job instead of\nwaiting for it. The answer is `202 Accepted` with a job envelope, a `Location` header and\n`Retry-After: 5`. Poll `GET /api/v1/commerce/jobs/{job_id}` for the result; polling is free.\nThe data points are held at submission, charged once when the job succeeds, and returned\nwhen it fails. A caller without enough data points gets `402` before any job exists.\n\nAdd `wait=N`, for example `Prefer: respond-async, wait=20`, to keep the request open for up\nto N seconds (at most 25). Waiting adds at most N + 2 seconds to the reply. A job that\nfinishes in that time is answered exactly like the synchronous call, without\n`Preference-Applied`. Otherwise the `202` follows. A job answered inline still sends its callback, if it has one,\nso the result can arrive twice; discard the repeat by its `Nesika-Delivery-Id`.\n\nAdd `callback_url` to the body to have the finished job POSTed to that URL. The jobs route\ndescribes the payload and its headers.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Prefer",
            "in": "header",
            "description": "Send `respond-async` to run the call as an asynchronous job (RFC 7240). Add `wait=N`, from 0 to 25 seconds, to wait inline for a job that finishes quickly.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async, wait=0"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceDeepSearchRequestDto"
              },
              "examples": {
                "request": {
                  "summary": "Deep search across retailers",
                  "value": {
                    "market": "AU",
                    "query": "coffee beans",
                    "product": {
                      "canonical_id": "store-a_SKU-1",
                      "canonical_name": "Acme Coffee Beans 1kg",
                      "variant": "1kg",
                      "model": null,
                      "sku": "sku-1",
                      "barcode": null,
                      "gtin": "12345678",
                      "brand": "Acme",
                      "description": "Medium roast whole bean coffee",
                      "source_url": "https://store.example.com/coffee-beans-1kg"
                    },
                    "reason": "check availability at additional retailers",
                    "budget": {
                      "max_results": 20,
                      "max_candidates": 12,
                      "max_merchants": 6,
                      "max_pages": 12,
                      "max_extractions": 8,
                      "deadline_seconds": 540
                    }
                  }
                }
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceDeepSearchRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceDeepSearchRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfObject"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceDeepSearchResponseDto"
                },
                "examples": {
                  "success": {
                    "summary": "Deep search results",
                    "value": {
                      "status": "complete",
                      "market": "AU",
                      "failures": [ ],
                      "research_focus": "availability",
                      "results": [
                        {
                          "merchant_id": "store-b",
                          "merchant_name": "Store B",
                          "serp_rank": 1,
                          "title": "Acme Coffee Beans 1kg",
                          "url": "https://store-b.example/coffee-beans-1kg",
                          "identity": {
                            "canonical_id": "store-b_SKU-1",
                            "canonical_name": "Acme Coffee Beans 1kg",
                            "canonical_url": "https://store-b.example/coffee-beans-1kg",
                            "variant": "1kg",
                            "identifiers": {
                              "product_id": "sku-1",
                              "product_id_source": "sku",
                              "sku": "sku-1",
                              "mpn": null,
                              "gtins": [
                                "12345678"
                              ]
                            },
                            "matching_attributes": {
                              "brand": "Acme",
                              "model": null,
                              "weight": "1",
                              "weight_unit": "kg",
                              "volume": null,
                              "volume_unit": null,
                              "quantity": null,
                              "variant": "1kg",
                              "color": null,
                              "size": null,
                              "material": null,
                              "style": null,
                              "category": "coffee"
                            },
                            "confidence": {
                              "status": "supported",
                              "score": 100,
                              "matching_type": "Perfect_Match",
                              "basis": "exact_gtin"
                            },
                            "evidence": [
                              {
                                "kind": "search_result",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": 1,
                                "field": "title",
                                "value": "Acme Coffee Beans 1kg"
                              },
                              {
                                "kind": "product_page",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": null,
                                "field": null,
                                "value": null
                              },
                              {
                                "kind": "extracted_field",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": null,
                                "field": "price",
                                "value": 24.99
                              },
                              {
                                "kind": "extracted_field",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": null,
                                "field": "availability",
                                "value": "InStock"
                              }
                            ]
                          },
                          "representative_offer": {
                            "merchant_id": "store-b",
                            "merchant_name": "Store B",
                            "product_name": "Acme Coffee Beans 1kg",
                            "product_url": "https://store-b.example/coffee-beans-1kg",
                            "canonical_id": "store-b_SKU-1",
                            "price": {
                              "status": "extracted",
                              "value": 24.99,
                              "currency": "AUD"
                            },
                            "stock": {
                              "status": "extracted",
                              "value": "InStock",
                              "currency": null
                            },
                            "shipping": {
                              "status": "unsupported",
                              "value": null,
                              "currency": null
                            },
                            "identity_confidence": {
                              "status": "supported",
                              "score": 100,
                              "matching_type": "Perfect_Match",
                              "basis": "exact_gtin"
                            },
                            "constraints": {
                              "merchant": "satisfied",
                              "category": "unsupported",
                              "price": "unsupported"
                            },
                            "evidence": [
                              {
                                "kind": "search_result",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": 1,
                                "field": "title",
                                "value": "Acme Coffee Beans 1kg"
                              },
                              {
                                "kind": "product_page",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": null,
                                "field": null,
                                "value": null
                              },
                              {
                                "kind": "extracted_field",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": null,
                                "field": "price",
                                "value": 24.99
                              },
                              {
                                "kind": "extracted_field",
                                "merchant_id": "store-b",
                                "url": "https://store-b.example/coffee-beans-1kg",
                                "rank": null,
                                "field": "availability",
                                "value": "InStock"
                              }
                            ]
                          },
                          "extraction_probability": {
                            "status": "extracted",
                            "value": 0.92,
                            "currency": null
                          },
                          "constraints": {
                            "merchant": "satisfied",
                            "category": "unsupported",
                            "price": "unsupported"
                          },
                          "evidence": [
                            {
                              "kind": "search_result",
                              "merchant_id": "store-b",
                              "url": "https://store-b.example/coffee-beans-1kg",
                              "rank": 1,
                              "field": "title",
                              "value": "Acme Coffee Beans 1kg"
                            },
                            {
                              "kind": "product_page",
                              "merchant_id": "store-b",
                              "url": "https://store-b.example/coffee-beans-1kg",
                              "rank": null,
                              "field": null,
                              "value": null
                            },
                            {
                              "kind": "extracted_field",
                              "merchant_id": "store-b",
                              "url": "https://store-b.example/coffee-beans-1kg",
                              "rank": null,
                              "field": "price",
                              "value": 24.99
                            },
                            {
                              "kind": "extracted_field",
                              "merchant_id": "store-b",
                              "url": "https://store-b.example/coffee-beans-1kg",
                              "rank": null,
                              "field": "availability",
                              "value": "InStock"
                            }
                          ]
                        }
                      ],
                      "discovered_retailers": [
                        {
                          "merchant_id": "store-b",
                          "merchant_name": "Store B",
                          "result_count": 1
                        }
                      ],
                      "discovered_pages": [
                        {
                          "kind": "classification",
                          "merchant_id": null,
                          "url": null,
                          "rank": null,
                          "field": "research_focus",
                          "value": "availability"
                        },
                        {
                          "kind": "product_page",
                          "merchant_id": "store-b",
                          "url": "https://store-b.example/coffee-beans-1kg",
                          "rank": 1,
                          "field": null,
                          "value": null
                        }
                      ],
                      "ambiguity_notes": [ ]
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceJobDto"
                },
                "examples": {
                  "success": {
                    "summary": "Accepted as a job",
                    "value": {
                      "job_id": "job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "status": "pending",
                      "operation": "deep_search",
                      "poll_url": "/api/v1/commerce/jobs/job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "submitted_at": "2026-09-14T04:11:03Z",
                      "expires_at": "2026-09-15T04:11:03Z",
                      "callback_registered": false,
                      "error": null,
                      "poll_after_ms": 5000,
                      "result": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/v1/commerce/jobs/{job_id}": {
      "get": {
        "tags": [
          "Commerce"
        ],
        "summary": "Reports an asynchronous Commerce job.",
        "description": "Submit any Commerce operation with `Prefer: respond-async` to run it as a job. The\nsubmission returns `202 Accepted` with a job whose `poll_url` points here. Polling is\nfree. The operation's data points are held at submission, charged once when the job\nsucceeds, and returned when it fails or times out.\n\nReturns `202` while the job is pending, then `200` with the job's `result` (the exact\nbody the synchronous call returns) or its `error`. A job and its result are kept for 24\nhours from submission; after that this returns `410 job_expired`. An unknown job id, or\none that belongs to another project, returns `404 job_not_found`.\n\n**Callbacks.** Add `callback_url` to the submission body to have the finished job POSTed\nto you instead of polling. The URL must be https on an allowed host, such as\n`zapier.com`. The POST body is exactly this route's `200` body. It carries three\nheaders: `Nesika-Job-Id`; `Nesika-Delivery-Id`, which is the same on every retry so you\ncan discard duplicates; and `Nesika-Signature: t={unix seconds},v1={hex}`, where `v1` is\nthe HMAC-SHA256 of `\"{t}.{raw body}\"` under a signing secret specific to your project.\nThat secret cannot be retrieved yet, so a signature cannot be verified today. Until it\ncan, treat a callback as a prompt and read the result from this route, which requires\nyour API key. Answer with any `2xx`. Any other answer, a\nredirect or a timeout is retried, up to six attempts over about 23 hours. A failed job\nis delivered too, and delivery never changes what the job is charged.",
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfObject"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceJobDto"
                },
                "examples": {
                  "success": {
                    "summary": "A succeeded job",
                    "value": {
                      "job_id": "job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "status": "succeeded",
                      "operation": "search_products",
                      "poll_url": "/api/v1/commerce/jobs/job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "submitted_at": "2026-09-14T04:11:03Z",
                      "expires_at": "2026-09-15T04:11:03Z",
                      "callback_registered": false,
                      "error": null,
                      "completed_at": "2026-09-14T04:11:27Z",
                      "units_charged": 5,
                      "result": {
                        "status": "complete",
                        "market": "AU",
                        "failures": [ ],
                        "candidates": [
                          {
                            "merchant_id": "store-a",
                            "merchant_name": "Store A",
                            "serp_rank": 6,
                            "title": "Acme Coffee Beans 1kg",
                            "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                            "identity": null,
                            "representative_offer": {
                              "merchant_id": "store-a",
                              "merchant_name": "Store A",
                              "product_name": "Acme Coffee Beans 1kg",
                              "product_url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                              "canonical_id": null,
                              "price": {
                                "status": "extracted",
                                "value": 24.99,
                                "currency": "AUD"
                              },
                              "stock": {
                                "status": "not_extracted",
                                "value": null,
                                "currency": null
                              },
                              "shipping": {
                                "status": "unsupported",
                                "value": null,
                                "currency": null
                              },
                              "identity_confidence": {
                                "status": "unsupported",
                                "score": null,
                                "matching_type": null,
                                "basis": "discovery_no_identity"
                              },
                              "constraints": {
                                "merchant": "unsupported",
                                "category": "unsupported",
                                "price": "unsupported"
                              },
                              "evidence": [
                                {
                                  "kind": "search_result",
                                  "merchant_id": "store-a",
                                  "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                  "rank": 6,
                                  "field": "title",
                                  "value": "Acme Coffee Beans 1kg"
                                },
                                {
                                  "kind": "search_result",
                                  "merchant_id": "store-a",
                                  "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                  "rank": 6,
                                  "field": "url_kind",
                                  "value": "discovery_redirect_not_seller_page"
                                },
                                {
                                  "kind": "search_result",
                                  "merchant_id": "store-a",
                                  "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                  "rank": 6,
                                  "field": "discovery_price",
                                  "value": 24.99
                                }
                              ]
                            },
                            "extraction_probability": {
                              "status": "not_extracted",
                              "value": null,
                              "currency": null
                            },
                            "constraints": {
                              "merchant": "unsupported",
                              "category": "unsupported",
                              "price": "unsupported"
                            },
                            "evidence": [
                              {
                                "kind": "search_result",
                                "merchant_id": "store-a",
                                "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                "rank": 6,
                                "field": "title",
                                "value": "Acme Coffee Beans 1kg"
                              },
                              {
                                "kind": "search_result",
                                "merchant_id": "store-a",
                                "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                "rank": 6,
                                "field": "url_kind",
                                "value": "discovery_redirect_not_seller_page"
                              },
                              {
                                "kind": "search_result",
                                "merchant_id": "store-a",
                                "url": "https://www.google.com/shopping/product/1?prds=pid:123456789",
                                "rank": 6,
                                "field": "discovery_price",
                                "value": 24.99
                              }
                            ]
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceJobDto"
                },
                "examples": {
                  "success": {
                    "summary": "A pending job",
                    "value": {
                      "job_id": "job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "status": "pending",
                      "operation": "search_products",
                      "poll_url": "/api/v1/commerce/jobs/job_7c1e4b2a9d8f6e5c4b3a29180f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5c0a1b2c3d4e5f60718293a4b5c6d7e8f9",
                      "submitted_at": "2026-09-14T04:11:03Z",
                      "expires_at": "2026-09-15T04:11:03Z",
                      "callback_registered": false,
                      "error": null,
                      "poll_after_ms": 5000,
                      "result": null
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "410": {
            "description": "Gone",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products": {
      "get": {
        "tags": [
          "Account & Usage Data"
        ],
        "summary": "List my tracked products.",
        "description": "Use this endpoint when an integration or AI agent needs the authenticated caller's own\ntracked product list before requesting account-scoped positions, reports, or price\nchanges. Data is scoped to the caller's active workspace and is not the public market\ncatalog.\n\nUse this `/me` endpoint only when you need products already configured in the\ncaller's account.\n\nPagination uses `page` and `pageSize`; `pageSize` is capped at 100.\n`status` accepts `tracked`, `paused`, or `all`.\n\nThis API is metered. Responses include quota and rate-limit headers, and calls may\nreturn `429 Too Many Requests` when the caller exceeds their plan quota.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "tracked"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                },
                "examples": {
                  "success": {
                    "summary": "Account tracked products",
                    "value": {
                      "data": [
                        {
                          "productId": "prod_ABC123",
                          "name": "UltraClean Laundry Liquid 2L",
                          "sku": "UC-LL-2L",
                          "brand": "UltraClean",
                          "category": "Laundry",
                          "scanStatus": "completed",
                          "lastScanDate": "2026-07-14T00:00:00Z",
                          "competitorCount": 3,
                          "currentPrice": 12.5,
                          "productUrl": "https://example.com/account/products/prod-abc123"
                        }
                      ],
                      "meta": {
                        "page": 1,
                        "pageSize": 20,
                        "totalCount": 1,
                        "totalPages": 1,
                        "hasNextPage": false
                      },
                      "error": null
                    }
                  }
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/position": {
      "get": {
        "tags": [
          "Account & Usage Data"
        ],
        "summary": "Get my portfolio price position.",
        "description": "Use this endpoint when you need an account-scoped view of how the caller's whole tracked\nportfolio is positioned against competitors, such as \"are we generally above or below\nmarket?\" dashboards or agent summaries.\n\nThis endpoint is scoped to the authenticated caller's active workspace. Use\n`GET /api/v1/me/products/{productId}/position` for a single tracked product.\n\n`timeframe` accepts `7d`, `30d`, or `90d`. Recent scans can be\neventually consistent, so portfolio movement may lag immediately after a scan completes.\n\nThis API is metered. Responses include quota and rate-limit headers, and calls may\nreturn `429 Too Many Requests` when the caller exceeds their plan quota.",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "timeframe",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "30d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/{productId}/position": {
      "get": {
        "tags": [
          "Account & Usage Data"
        ],
        "summary": "Get my product price position.",
        "description": "Use this endpoint when you need the authenticated caller's competitive position for one\ntracked product, for example to explain whether that product is overpriced, underpriced,\nor near market.\n\nThis endpoint only returns data for products in the caller's active workspace. Use\n`GET /api/v1/me/products/position` for portfolio-level account positioning.\n\nThe market is the latest price (last 30 days) of each competitor listing this workspace has\nconfirmed as a match for the product (your own store is never part of it); prices in another\ncurrency than yours are left out and counted in `excluded_other_currency_count`.\n\nRecent scans can be eventually consistent, so newly scanned observations may take a short\ntime to affect the returned position.\n\nThis API is metered. Responses include quota and rate-limit headers, and calls may\nreturn `429 Too Many Requests` when the caller exceeds their plan quota.",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/scans": {
      "get": {
        "tags": [
          "Account & Usage Data"
        ],
        "summary": "List my scans.",
        "description": "Use this endpoint when an integration needs the authenticated caller's recent scan runs,\nfor example to find the latest completed scan before requesting a report or to monitor\naccount-specific scan status.\n\nThis endpoint is scoped to the caller's active workspace and returns account scan\nrecords, not public market data. Use `GET /api/v1/me/scans/{scanId}/report` after\nselecting a scan when you need export-ready scan details, and `GET /api/v1/me/scans/{scan_id}`\nfor job counts, the partial flag and the quota reservation of one scan.\n\nPagination uses `page` and `pageSize`; `pageSize` is capped at 50.\nRecent scan status can be eventually consistent while processing completes.\n\nThis API is metered. Responses include quota and rate-limit headers, and calls may\nreturn `429 Too Many Requests` when the caller exceeds their plan quota.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Start a manual scan.",
        "description": "Requires `Idempotency-Key` and the previewed body plus `preview_id`. The preview binds the scope,\nthe products' versions, the competitor set and the plan terms; the quota is re-checked now (402\n`quota_exceeded` on a plan without overage) and again by the engine. One manual scan may be pending or\nrunning per workspace (409 `scan_already_running` with its `scan_id`). The operation id is minted\nfrom the preview id (one reservation, one settlement). Returns 202 with `scan_id` and\n`status_path`. 503 `scan_queue_unavailable`: nothing was started; retry with the same preview.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanStartedDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanStartedDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanStartedDto"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Gone",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/scans/{scanId}/report": {
      "get": {
        "tags": [
          "Account & Usage Data"
        ],
        "summary": "Get my scan report.",
        "description": "Use this endpoint when you need an export-ready report for one of the authenticated\ncaller's scans, such as feeding a business intelligence job, attaching a report to an\nagent response, or downloading the latest scan as CSV.\n\nThis endpoint is scoped to the caller's active workspace. The special `scanId`\nvalue `latest` resolves to that workspace's most recent scan. Use\n`GET /api/v1/me/scans` first when you need to list available scans or check status.\n\nThe default response wraps the generated CSV in JSON for API and MCP clients.\n`format=csv` returns the raw CSV file for direct download. The CSV is generated on\ndemand and recent scan results can be eventually consistent.\n\nThis API is metered. Responses include quota and rate-limit headers, and calls may\nreturn `429 Too Many Requests` when the caller exceeds their plan quota.",
        "parameters": [
          {
            "name": "scanId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/price-changes": {
      "get": {
        "tags": [
          "Account & Usage Data"
        ],
        "summary": "List my price changes.",
        "description": "Use this endpoint when you need recent account-scoped price movement for the\nauthenticated caller's tracked products, such as alert feeds, daily summaries, or agent\nexplanations of what changed since the last review.\n\nThis endpoint is scoped to the caller's active workspace and reports COMPETITOR moves only:\nadjacent observations of each competitor listing this workspace has confirmed as a match for\na tracked product, read from this workspace's scans. Your own store's price moves are not\nincluded.\n\n`days` is capped at 90, `limit` is capped at 200, and\n`min_change_percent` filters out small movements. Recent scans can be eventually\nconsistent, so newly observed price changes may not appear immediately.\n\nThis API is metered. Responses include quota and rate-limit headers, and calls may\nreturn `429 Too Many Requests` when the caller exceeds their plan quota.",
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 7
            }
          },
          {
            "name": "direction",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "min_change_percent",
            "in": "query",
            "schema": {
              "type": "number",
              "format": "double",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/competitors/overview": {
      "get": {
        "tags": [
          "Account & Usage Data"
        ],
        "summary": "Get my competitor overview.",
        "description": "Use this endpoint when you need an account-scoped competitor overview for the\nauthenticated caller's tracked products, such as which competitors most often create\npricing pressure or where an account should focus attention.\n\nThis endpoint is scoped to the caller's active workspace and is based on that account's\npersisted insights.\n\n`competitorUrls` accepts a comma-separated filter list. `limit` is capped at\n100. Unknown competitor filters are reported in the response so agents can explain why a\nrequested competitor was not matched.\n\nThis API is metered. Responses include quota and rate-limit headers, and calls may\nreturn `429 Too Many Requests` when the caller exceeds their plan quota.",
        "parameters": [
          {
            "name": "competitorUrls",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/api-keys": {
      "get": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectCredentialRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectCredentialRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectCredentialRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/api-keys/{credentialId}": {
      "delete": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/api-keys/{credentialId}/rotate": {
      "post": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/commerce-mcp-credentials": {
      "get": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectCredentialRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectCredentialRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectCredentialRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/commerce-mcp-credentials/{credentialId}": {
      "delete": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/commerce-mcp-credentials/{credentialId}/rotate": {
      "post": {
        "tags": [
          "Developer Project Credentials"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Developer Projects"
        ],
        "summary": "Creates a named developer project or replays the existing project\nwhen the same normalized name has already been created.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/initial": {
      "put": {
        "tags": [
          "Developer Projects"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/settings": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectSettingsRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectSettingsRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectSettingsRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/usage": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectUsageDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectUsageDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectUsageDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectUsageDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectUsageDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectUsageDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/quota": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectQuotaDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectQuotaDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectQuotaDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectQuotaDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectQuotaDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectQuotaDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/credits": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditsSummaryDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditsSummaryDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditsSummaryDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditsSummaryDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditsSummaryDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditsSummaryDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/credits/checkout": {
      "post": {
        "tags": [
          "Developer Projects"
        ],
        "summary": "Starts a Stripe Checkout session for a prepaid credit pack.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditCheckoutRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditCheckoutRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditCheckoutRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/credits/purchases/{sessionId}": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "summary": "Reports whether a checkout session has been credited to the owning account's wallet. Credits\nmove only on a verified Stripe webhook, so `pending` is the honest answer until then.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditPurchaseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditPurchaseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditPurchaseDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditPurchaseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditPurchaseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditPurchaseDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/billing": {
      "get": {
        "tags": [
          "Developer Projects"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/developer-projects/{projectId}/billing/portal": {
      "post": {
        "tags": [
          "Developer Projects"
        ],
        "summary": "A Stripe CUSTOMER PORTAL is not applicable to this project type. Prepaid credit projects\nnever create a Stripe customer: every purchase is a one-time Checkout session, and there is\nno subscription, invoice history, or payment method on file to manage.\n\nAnswered as a documented 501 rather than the previous unconditional 409, which the console\nread as \"billing is broken\". Buy credits with\n`POST /api/v1/developer-projects/{projectId}/credits/checkout` instead.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable"
          }
        },
        "security": [
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/identity/workspace": {
      "get": {
        "tags": [
          "Credential Identity"
        ],
        "summary": "Resolves the retail workspace bound to the supplied workspace API key.",
        "description": "Canonical HTTP route: `/api/v1/identity/workspace`.\nBecause the MCP API base already ends in `/api/v1`, configure:\n`NESIKA_WORKSPACE_IDENTITY_INTROSPECTION_PATH=/identity/workspace`.\n\nSupply exactly one non-empty `X-API-Key` header. Do not send an\n`Authorization` header. The response is never cacheable. The root\n`workspaceId` and `credentialKind` fields are canonical; nested\n`data.resourceKind` and `data.ownerId` are compatibility fields\nfor the current MCP parser.\n\nRetail V1 authorization introspection (additive): `subject_id`,\n`workspace_id`, `role` (the key creator's live role), `scopes[]`,\n`permissions[]` (role INTERSECT scope, see\n`docs/architecture/retail-v1-workspace-api.md`), `credential_kind`,\nand `client_id` / `grant_id` (null for API keys). Role, permissions and the\ncredential fields come from the same `RetailActor` every Retail permission check uses\n(shared F0 request authorization context plus the live role).",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.WorkspaceApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.WorkspaceApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.WorkspaceApiKeyIdentityDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/v1/identity/developer-project": {
      "get": {
        "tags": [
          "Credential Identity"
        ],
        "summary": "Resolves the developer project bound to the supplied Commerce MCP credential.",
        "description": "Canonical HTTP route: `/api/v1/identity/developer-project`.\nBecause the MCP API base already ends in `/api/v1`, configure:\n`NESIKA_PROJECT_IDENTITY_INTROSPECTION_PATH=/identity/developer-project`.\n\nSupply exactly one non-empty `X-API-Key` header. Do not send an\n`Authorization` header. General developer-project API keys are not accepted.\nThe response is never cacheable. The root `projectId` and\n`credentialKind` fields are canonical; nested `data.resourceKind`\nand `data.ownerId` are compatibility fields for the current MCP parser.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.DeveloperProjectApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.DeveloperProjectApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.DeveloperProjectApiKeyIdentityDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/v1/me/alert-rules": {
      "get": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "List my alert rules.",
        "description": "Only rules you own (rules are per user; other members' rules are not returned). Cursor pagination\n(`limit` 1 to 100, `cursor`). Each rule carries its strong `etag` for updates.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailAlertRuleDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailAlertRuleDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailAlertRuleDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "Create an alert rule for myself.",
        "description": "Body: `name`, `condition_type`, `product_id` (a tracked product), optional\n`competitor_id` (a workspace competitor; not for `competitor_found`), `threshold_value`\n(required for `price_below` / `price_above`), `currency` (display only; no conversion),\n`enabled` (default true), `email_notifications` (default false). Recipient fields are\nrejected: notifications and emails go only to you. At most 100 rules per workspace (409\n`alert_rule_limit_reached`). Requires `Idempotency-Key`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/alert-rules/{ruleId}": {
      "get": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "Get one of my alert rules.",
        "description": "Returns the strong `ETag` needed for update and delete. Rules owned by others are 404.",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "Replace one of my alert rules.",
        "description": "Full replacement of the editable fields (same body and validation as create). Requires\n`If-Match` with the rule's current ETag (428 / 412) and `Idempotency-Key`. Rules owned by\nother members are 404 here (members can no longer edit each other's rules through V1).",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "Delete one of my alert rules.",
        "description": "Requires `If-Match` (428 / 412) and `Idempotency-Key`. No preview is required for your own\nalert rules (plan section 5). Past notifications of the rule are kept until they expire (90 days).",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailDeletedDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailDeletedDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailDeletedDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/alert-rules/{ruleId}/toggle": {
      "post": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "Enable or disable one of my alert rules.",
        "description": "Body `{ \"enabled\": true | false }`. Setting the current value again is a no-op success.\n`If-Match` is optional here (the operation is idempotent by value); when sent it must match.\nRequires `Idempotency-Key`.",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleToggleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleToggleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleToggleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/notifications": {
      "get": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "List my notifications.",
        "description": "In-app notifications produced by YOUR alert rules (newest first; the latest 1,000 are paged).\n`status`: `unread`, `read` or `dismissed`. Includes `unread_count`. An API key\nsees its creator's notifications, including those of rules created in the web app.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailNotificationListDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailNotificationListDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailNotificationListDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/notifications/read": {
      "post": {
        "tags": [
          "Retail Workspace: Alerts"
        ],
        "summary": "Mark my notifications read.",
        "description": "Body: exactly one of `{ \"ids\": [...] }` (1 to 100 ids) or `{ \"all\": true }`. Ids that do not exist\nor are not yours are reported in `not_found_ids` (never an error, never touched). Requires\n`Idempotency-Key`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarkNotificationsReadRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarkNotificationsReadRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarkNotificationsReadRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarkNotificationsReadResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarkNotificationsReadResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarkNotificationsReadResultDto"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/competitors/{competitorId}": {
      "get": {
        "tags": [
          "Retail Workspace: Analytics"
        ],
        "summary": "Get one competitor in detail.",
        "description": "Summary (last scanned, cheaper-than-you share and trend, average undercut, out-of-stock count),\nperfect and similar match counts, coverage (`percent_products_with_data`) and the latest price\nchanges observed at this competitor (30 days, at most 20). `competitor_id` is the workspace\ncompetitor id (vendor id). Marketplace listings are excluded when the workspace excludes them.",
        "parameters": [
          {
            "name": "competitorId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorDetailDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorDetailDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorDetailDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/analytics/price-table": {
      "get": {
        "tags": [
          "Retail Workspace: Analytics"
        ],
        "summary": "Get the product price table.",
        "description": "One row per tracked product with your price (and when it was observed) and each competitor's price.\nFilters: `scan_id` (default latest), `category`, `subcategory`, `owner` (a LABEL\nfilter, not an authorization boundary: every member can read every product), `competitor`\n(comma-separated competitor ids), `q`, `matched_only`, `in_stock_only`,\n`include_similar`. Cursor pagination (`limit` 1 to 100). `period` is not accepted here\n(the table is a single-scan snapshot; use price-matrix or market for trends).",
        "parameters": [
          {
            "name": "scan_id",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "subcategory",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "owner",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "competitor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "matched_only",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "in_stock_only",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "include_similar",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "period",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceTableDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceTableDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceTableDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/analytics/price-matrix": {
      "get": {
        "tags": [
          "Retail Workspace: Analytics"
        ],
        "summary": "Get the competitor price matrix.",
        "description": "Per competitor: products where your price is higher, lower or equal (the web app's Overview matrix).\nSame filters as the price table (without paging). Optional `period` (`1m`, `3m`, `6m`,\n`12m`, `all`) adds the per-scan trend over the completed scans in that window (at most 50).",
        "parameters": [
          {
            "name": "scan_id",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "subcategory",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "owner",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "competitor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "in_stock_only",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "include_similar",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "period",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceMatrixDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceMatrixDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceMatrixDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/analytics/market": {
      "get": {
        "tags": [
          "Retail Workspace: Analytics"
        ],
        "summary": "Get market analysis.",
        "description": "Basket comparison per competitor (matched products, both basket totals, variation percent) with an\noptional trend (`period`), and, when `product_id` is given, that product's rolling 13 / 52 week\nmarket benchmarks. Same filters as the price matrix.",
        "parameters": [
          {
            "name": "scan_id",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "subcategory",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "owner",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "competitor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "in_stock_only",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "include_similar",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "period",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "product_id",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarketDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarketDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarketDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/competitors": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "List my workspace competitors.",
        "description": "Every competitor document with status (`active`, `pending`, `primary_vendor`, ...),\n`include_in_default_scan`, whether it is in the default set, usage (products scanning it, inheriting,\nexplicit) and the plan limit (authoritative). Cursor pagination (`limit` 1 to 100, `cursor`).",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorListDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorListDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorListDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/competitors/preview": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Preview workspace competitor changes.",
        "description": "Read-only POST (no `Idempotency-Key`). Body `{ \"operations\": [ ... ] }`, 1 to 20 of `add`\n(`name`, `base_url`, optional `include_in_default_scan`, `exclude_marketplace_products`,\n`notes`; the competitor id is derived from the name), `update` and `remove` (by\n`competitor_id`). Removal impact uses the deletion-impact groups: inheriting products stop scanning it,\nexplicit lists narrow, and products that named only it become blocked. Returns the preview ticket with\nlimits before / after and a data-point ESTIMATE.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorChangeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorChangeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/competitors/apply": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Apply workspace competitor changes.",
        "description": "Requires `Idempotency-Key` and the `preview_id` of a matching preview (always). Invalid items are\nskipped and reported. Removal keeps price history and matches; explicit product lists keep the removed id\n(reported unresolved, never widened).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorChangeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorChangeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorApplyResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorApplyResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorApplyResultDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Gone",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/insights/summary": {
      "get": {
        "tags": [
          "Retail Workspace: Insights"
        ],
        "summary": "List my insight summaries (backward-compatible page/pageSize contract).",
        "description": "Returns the cards the web app shows: only currently tracked products, marketplace listings\nexcluded when the workspace excludes them (both applied before pagination). `type`\naccepts `undercut` / `opportunity` or the stored `competitor_undercut` /\n`price_increase_opportunity`. `status` accepts `open` (new, valid, viewed or a lapsed\nsnooze), `new`, `valid`, `viewed`, `snoozed` (currently snoozed), `dismissed`,\n`actioned`, `expired`, `invalidated`; omitted, it returns the web app's default view\n(everything except expired, invalidated and currently snoozed). Items keep the camelCase fields and add snake_case evidence\n(`competitor_prices` with observation times, `confidence`, `suggested_price` with\n`suggested_price_basis`, `why_it_matters_assumptions` verbatim, `valid_until`,\n`scan_id`, product and competitor ids). Prefer `GET /api/v1/me/insights` (cursor) for new\nintegrations.\n\n`owner` (optional, max 256 characters) keeps only cards of tracked products whose owner LABEL equals\nthe value (trimmed, case-insensitive), read from the workspace's tracked products, so it works before\nany scan completes. It is a label filter, NOT an access boundary: every member with `workspace.read`\ncan read every card without it. The response adds a top-level `filters_applied` echo (`type`,\n`severity`, `status`, `competitor`, `owner`, `owner_products_matched`,\n`owner_is_access_control` = false); an owner nobody carries gives an empty list with\n`owner_products_matched` 0.",
        "parameters": [
          {
            "name": "severity",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "competitor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "owner",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightsSummaryResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightsSummaryResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightsSummaryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfInsightSummaryDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfInsightSummaryDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfInsightSummaryDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/insights": {
      "get": {
        "tags": [
          "Retail Workspace: Insights"
        ],
        "summary": "List my insights with evidence (cursor pagination).",
        "description": "Same visibility and filters as `insights/summary` (except its `owner` label filter), plus `product_id` (tracked product id or\ntracked product document id) and `q` (name / SKU search). Items are full insight objects\n(evidence, confidence, recommendation with `suggested_price_basis`, verbatim assumptions,\nlifecycle with `allowed_actions`). `limit` 1 to 100 (default 50); pass `next_cursor` back as\n`cursor`. Reading never marks a card viewed.",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "severity",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "competitor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "product_id",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailInsightDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailInsightDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailInsightDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/insights/{insightId}": {
      "get": {
        "tags": [
          "Retail Workspace: Insights"
        ],
        "summary": "Get one insight with its evidence.",
        "description": "No side effects (unlike the internal route, it never marks the card viewed). Returns the strong\n`ETag`. 404 `not_found` when the card does not exist in the workspace, belongs to an\nuntracked product, is an excluded marketplace listing, or is a valid card past its\n`valid_until`.",
        "parameters": [
          {
            "name": "insightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInsightDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInsightDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInsightDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/insights/{insightId}/status": {
      "post": {
        "tags": [
          "Retail Workspace: Insights"
        ],
        "summary": "Change an insight's lifecycle status.",
        "description": "Body `{ \"action\": \"dismiss\" | \"snooze\" | \"record_action\" | \"reopen\", ... }`:\n`dismiss` takes an optional `reason` (max 500); `snooze` takes exactly one of\n`snooze_until` (UTC, 1 hour to 90 days ahead) or `snooze_hours` (1 to 2160);\n`record_action` requires `action_taken` (free text, max 200) and takes optional\n`notes` (max 1000) and ONLY records what the user says they did (no price is changed);\n`reopen` returns a dismissed, snoozed or actioned card to `valid`. Requires\n`Idempotency-Key`. Disallowed transitions (for example on an expired or invalidated card, or\nreopen when a newer card for the same product is already open) are 409\n`invalid_state_transition`. A dismissed card may be regenerated by the engine on the next scan\nwhen the same gap is still present.",
        "parameters": [
          {
            "name": "insightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightStatusRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightStatusRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightStatusRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInsightDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInsightDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInsightDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/{productId}/matches": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Get the matches of one of my products.",
        "description": "Candidates grouped per competitor with `is_selected`, `is_primary`, `state`, `source`,\nactor, decision time, `matching_type`, confidence, the persisted reason only, health and\n`price_observed_at` (null when never priced), plus how corrections take effect.",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductMatchesDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductMatchesDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductMatchesDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/{productId}/matches/correct": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Correct a match.",
        "description": "Requires `Idempotency-Key`. Body: `competitor_id`, `op` (`select`, `exclude`,\n`relabel`, `no_match`, `reset`, `set_primary`), `mapping_id` (candidate; required\nfor select, exclude, relabel, set_primary), optional `matching_type` (exact name; 400\n`invalid_matching_type`, select needs a positive type), `reason` (max 500), `exclusive`,\n`set_user_excluded`. Returns the competitor's updated candidates and the effects.",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchCorrectionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchCorrectionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchCorrectionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchCorrectionResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchCorrectionResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchCorrectionResultDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/{productId}/matches/url-preview": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Preview a URL correction.",
        "description": "Read-only POST. Body: `competitor_id`, `url` (on the competitor's site), optional positive\n`matching_type` (default Perfect_Match) and `reason`. Returns the preview ticket; impact has the\nprovider cost (one scrape, no data point), the per-scan data-point delta, the scrape budget and the quota\nprojection. Refusals (rate limit, quota, host mismatch, paused product, inactive competitor) are returned\nas errors.",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/{productId}/matches/url-apply": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Apply a URL correction.",
        "description": "Requires `Idempotency-Key` and the previewed body plus `preview_id`. Budget, rate limit and quota\nare re-checked before the job is created (a refusal costs no scrape). Returns 202 with `job_id`; poll\n`GET /api/v1/me/match-jobs/{job_id}`.",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailUrlCorrectionStartedDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailUrlCorrectionStartedDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailUrlCorrectionStartedDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/match-jobs/{jobId}": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Get a match (URL correction) job.",
        "description": "Status of a URL-correction job of your workspace; jobs of other workspaces are 404.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchJobDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchJobDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchJobDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/{productId}/price-history": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Get the price history of one of my products.",
        "description": "`productId` is the tracked product id or its SKU (the id `GET /api/v1/me/products` returns);\na SKU shared by several products returns 422 `ambiguous_product`, an unknown id or a product of\nanother workspace 404 `not_found`. Query: `from` / `to` (ISO 8601, UTC; default the last\n30 days, clamped to 365 days with `tierCapApplied`), `granularity` (`daily` default,\n`weekly`, `monthly`), `competitor_ids` (comma list of vendor ids, at most 50).\nBuckets per competitor vendor hold average, min and max price and the observation count; only this\nworkspace's scan observations are included. The body keeps the camelCase shape of the former\n`price-history-series` route (exception to the V1 snake_case convention) plus\n`trackedProductId`, `sku`, `trackingStatus` and `freshness`. Read only.",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "granularity",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "competitor_ids",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspacePriceHistorySeriesDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspacePriceHistorySeriesDto"
                },
                "examples": {
                  "success": {
                    "summary": "Bucketed price history of a tracked product",
                    "value": {
                      "data": {
                        "productId": "UC-2L",
                        "productName": "UltraClean Laundry Liquid 2L",
                        "granularity": "daily",
                        "from": "2026-07-12T00:00:00Z",
                        "to": "2026-07-14T00:00:00Z",
                        "currency": "AUD",
                        "byCompetitor": {
                          "bigw": [
                            {
                              "timestamp": "2026-07-12T00:00:00Z",
                              "averagePrice": 12.95,
                              "minPrice": 12.95,
                              "maxPrice": 12.95,
                              "observationCount": 1
                            },
                            {
                              "timestamp": "2026-07-14T00:00:00Z",
                              "averagePrice": 11.95,
                              "minPrice": 11.95,
                              "maxPrice": 11.95,
                              "observationCount": 1
                            }
                          ],
                          "chemistwarehouse": [
                            {
                              "timestamp": "2026-07-14T00:00:00Z",
                              "averagePrice": 12.5,
                              "minPrice": 12.5,
                              "maxPrice": 12.5,
                              "observationCount": 1
                            }
                          ]
                        },
                        "tierCapApplied": false,
                        "effectiveTierCapDays": 365,
                        "trackedProductId": "tp_7f3a91c2",
                        "sku": "UC-2L",
                        "trackingStatus": "tracked",
                        "freshness": {
                          "generatedAt": "2026-07-14T08:30:00Z",
                          "lastObservedAt": "2026-07-14T06:12:00Z",
                          "latestObservedAtByCompetitor": {
                            "bigw": "2026-07-14T06:12:00Z",
                            "chemistwarehouse": "2026-07-14T05:58:00Z"
                          },
                          "observationCount": 3
                        }
                      },
                      "meta": null,
                      "error": null
                    }
                  }
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspacePriceHistorySeriesDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/{productId}": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Get one of my products.",
        "description": "`product_id` is the stable product id from `GET /api/v1/me/products`; a SKU is accepted when it\nmatches exactly one product (otherwise 422 `ambiguous_product` with candidates). Returns tracking\nstatus, scan schedule, competitor mode and lists (effective and unresolved), configuration errors and\nwarnings, the latest observation per competitor with its timestamp, the last scan job and freshness.\nThe strong `ETag` header is the product version.",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductDetailDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductDetailDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductDetailDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/preview": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Preview product changes.",
        "description": "Read-only POST (no `Idempotency-Key`). Body `{ \"operations\": [ ... ] }` with 1 to 100 operations\n(`add` by url or sku + name, `pause`, `resume`, `delete`, `assign_scan_schedule`,\n`set_owner`, `set_competitors`). Each item is validated on its own with the existing rules\n(duplicates, invalid URLs, ambiguous ids, capacity, competitor lists); invalid items are reported and\nskipped at apply. Returns `{ preview_id, expires_at, impact, budget, resource_versions }`: impact has\nper-item results, product capacity before / after (authoritative) and a data-point ESTIMATE.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductChangeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductChangeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/products/apply": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Apply product changes.",
        "description": "Requires `Idempotency-Key`. Body: the previewed `operations` plus `preview_id`. A preview is\nREQUIRED for more than one operation, any `add` and any `delete` (428 `preview_required`); a\nsingle pause, resume, assign, owner or competitor change may apply directly. Preview binding errors:\n`preview_not_found`, `preview_context_mismatch`, `preview_expired`,\n`preview_payload_mismatch`, `preview_already_applied`, `preview_stale`. Delete removes the\nproduct and frees its slot (price history is kept); pause frees a slot and stops scanning; resume needs a\nfree slot. Scans pick the changes up at their next run.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductChangeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductChangeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductApplyResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductApplyResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductApplyResultDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Gone",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/report-preferences": {
      "get": {
        "tags": [
          "Retail Workspace: Report preferences"
        ],
        "summary": "Get my report preferences.",
        "description": "`scan_report_email` is evaluated exactly as the scan-report sender evaluates it (unset is OFF).\n`scope` is always `user_global`. An API key reads its creator's preference.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailReportPreferencesDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailReportPreferencesDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailReportPreferencesDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Retail Workspace: Report preferences"
        ],
        "summary": "Set my scan-report email preference.",
        "description": "Body `{ \"scan_report_email\": true | false }`. Changes ONLY your own preference, for every workspace you\nbelong to (stored on your user profile and synced to the email provider; no email is sent by this call).\nThere is no way to subscribe other people. Requires `Idempotency-Key`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Services.RetailWorkspace.V1.RetailReportPreferencesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Services.RetailWorkspace.V1.RetailReportPreferencesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Services.RetailWorkspace.V1.RetailReportPreferencesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailReportPreferencesDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailReportPreferencesDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailReportPreferencesDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/scans/preview": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Preview a manual scan.",
        "description": "Read-only POST. Body `{ \"scope\": \"all\" }` or `{ \"scope\": \"products\", \"product_ids\": [ ... ] }`\n(1 to 500 ids or unique SKUs). Returns the preview ticket; impact has the accounting (origin\n`manual`, billable per the accounting policy), the PR5 `reservation_upper_bound` (the rule the\nengine reserves with, NOT an estimate), a separately labelled `estimate` (expected consumption,\nexcluding no-match and unpriceable pairs), the authoritative ledger, `would_exceed_quota`,\n`would_be_refused`, skipped products (unknown, ambiguous, paused, blocked) and a running manual scan,\nif any. 422 `nothing_to_scan` when no product can be scanned.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/scans/{scanId}": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Get one of my scans.",
        "description": "Status, `partial` (ended without every job succeeding), job counts (succeeded, failed, blocked by an\nunresolved competitor list, pending, in progress), accounting origin, timestamps and the PR5 reservation\n(bound, reserved, consumed, released; denial reason, `failure_reason: quota_exceeded`). Scans of\nother workspaces are 404.",
        "parameters": [
          {
            "name": "scanId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanDetailDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanDetailDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanDetailDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/scan-schedules": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "List my scan schedules.",
        "description": "The default schedule (stored or synthesized, id `sp-default`) and every named schedule: IANA time zone,\ncadence, custom days / times, enabled, the next `next_runs` (1 to 20, default 5) runs from the\nengine-parity calculator with local time and UTC offset, member product counts and per-schedule\ndata-point ESTIMATES for the rest of the billing period, next to the authoritative ledger.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          },
          {
            "name": "next_runs",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleListDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleListDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleListDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/scan-schedules/preview": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Preview scan schedule changes.",
        "description": "Read-only POST. Body `{ \"operations\": [ ... ] }`, 1 to 10 of `create` (`name`, `frequency`\nHourly / Daily / Weekly / Monthly / Custom, IANA `timezone`, optional `start_date_utc`,\n`custom_schedule` for Custom, `enabled`), `update`, `enable`, `disable` and\n`delete` (by `schedule_id`). Per item: next runs in the zone with daylight-saving notes and\nmembership changes (disabling or deleting a named schedule moves its products to the default schedule,\nwhere they keep scanning). Invalid zone, frequency or custom cadence: 422 `invalid_timezone`,\n`invalid_frequency`, `invalid_schedule` per item.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleChangeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleChangeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/scan-schedules/apply": {
      "post": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Apply scan schedule changes.",
        "description": "Requires `Idempotency-Key` and the `preview_id` of a matching preview (always). Uses the same\nvalidation, next-run and audit rules as the web app. The engine scheduler picks the change up at its next\nevaluation.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleChangeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleChangeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleApplyResultDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleApplyResultDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleApplyResultDto"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Gone",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/setup-status": {
      "get": {
        "tags": [
          "Retail Workspace: Monitoring"
        ],
        "summary": "Get my workspace setup status.",
        "description": "Checklist: primary vendor set, tracked products, active competitors, an enabled schedule and its next run\n(with time zone), a completed scan, blocked products, an alert rule, pending invitations. Each item has a\n`next_action` (endpoint, suggested MCP tool, required permission and whether you hold it). Creating a\nworkspace and its paid subscription stay in the web app.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailSetupStatusDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailSetupStatusDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailSetupStatusDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/team": {
      "get": {
        "tags": [
          "Retail Workspace: Team"
        ],
        "summary": "Get my workspace team.",
        "description": "Members (ids, emails, roles, joined dates), seat usage (plan limit, members, seats reserved by\npending invitations, available) and the roles the caller may grant. Invitation details (opaque\n`invitation_id`, email, role, status, expiry) are returned only to callers with\n`team.manage`; others get `pending_invitation_count` only. Never returns a redemption token.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/team/invitations": {
      "post": {
        "tags": [
          "Retail Workspace: Team"
        ],
        "summary": "Invite a person to my workspace.",
        "description": "Body `{ \"email\", \"role\" }`; `role` must be one of the caller's `grantable_roles`\n(403 `role_not_grantable`). Sends the invitation email through the configured provider. Errors:\n402 `seat_limit_reached` (members plus pending invitations fill the plan), 409\n`invitation_already_pending`, 409 `already_a_member`, 403 `self_management_forbidden`.\nThe response carries the opaque `invitation_id` only. Requires `Idempotency-Key`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCreateInvitationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCreateInvitationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCreateInvitationRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/team/invitations/{invitationId}/cancel": {
      "post": {
        "tags": [
          "Retail Workspace: Team"
        ],
        "summary": "Cancel a pending or expired invitation.",
        "description": "`invitation_id` is the opaque id from `GET /team` (raw tokens are not accepted). The emailed link\nstops working. 409 `invitation_not_pending` when already accepted. Requires `Idempotency-Key`.",
        "parameters": [
          {
            "name": "invitationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/team/invitations/{invitationId}/resend": {
      "post": {
        "tags": [
          "Retail Workspace: Team"
        ],
        "summary": "Resend a pending invitation email.",
        "description": "Sends the invitation email again through the configured provider. Only pending, unexpired invitations;\nat most once per 60 seconds per invitation (429 `invitation_resend_throttled` with\n`retry_after_seconds`). Requires `Idempotency-Key`.",
        "parameters": [
          {
            "name": "invitationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/team/members/{userId}": {
      "patch": {
        "tags": [
          "Retail Workspace: Team"
        ],
        "summary": "Change a member's role.",
        "description": "Body `{ \"role\" }` (one of the caller's `grantable_roles`). Requires `If-Match` with the\nmember's `etag` from `GET /team` (428 / 412; checked again inside the guarded write) and\n`Idempotency-Key`. You cannot change your own role here (403 `self_management_forbidden`);\ndemoting the last administrator is 409 `last_admin`; a member whose role is above yours is 403\n`role_not_grantable`.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUpdateMemberRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUpdateMemberRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUpdateMemberRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamMemberDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamMemberDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamMemberDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Retail Workspace: Team"
        ],
        "summary": "Remove a member (apply a removal preview).",
        "description": "Requires `preview_id` from `removal-preview` (JSON body `{ \"preview_id\" }` or query\n`?preview_id=`; missing: 428 `preview_required`) and `Idempotency-Key`. The preview must\nbelong to the same caller, credential and workspace (409 `preview_context_mismatch`), be unexpired\n(410 `preview_expired`), name the same member (409 `preview_payload_mismatch`), be unused and not\nbeing applied under another `Idempotency-Key` (409 `preview_already_applied`; the preview is claimed\nfor one key before anything executes and released again if the removal is rejected) and the membership must\nbe unchanged (409 `preview_stale`).\n`If-Match` is optional here because the preview already pins the membership version. Last-admin\nand role rules are re-checked atomically. Side effects: membership removed, access revoked, the\nmember's alert rules in this workspace disabled.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "preview_id",
            "in": "query",
            "schema": {
              "type": "string",
              "default": null
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailRemoveMemberRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailRemoveMemberRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailRemoveMemberRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailDeletedDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailDeletedDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailDeletedDto"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Gone",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/team/members/{userId}/removal-preview": {
      "post": {
        "tags": [
          "Retail Workspace: Team"
        ],
        "summary": "Preview removing a member (required before removal).",
        "description": "Read-only POST (no `Idempotency-Key`). Checks the removal is allowed now (not yourself, not above\nyour role, not the last administrator) and returns `{ preview_id, expires_at, impact, budget,\nresource_versions }`; `impact` lists the member, the alert rules that will be disabled and the\neffects. The preview binds the caller, credential, workspace, member and membership version; it is\nnot proof that a human approved the removal.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          },
          {
            "Bearer": [ ]
          }
        ]
      }
    },
    "/api/v1/me/usage": {
      "get": {
        "tags": [
          "V1Usage"
        ],
        "summary": "Returns the calling key's current-cycle usage: consumed and reserved units, tier quota,\nremaining units, cold-miss live-scan budget state, rate limit, and upgrade suggestion.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfEngineUsageResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfEngineUsageResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfEngineUsageResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfEngineUsageResponseDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfEngineUsageResponseDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfEngineUsageResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "EntityTagHeaderValue": {
        "type": "object",
        "properties": {
          "tag": {
            "$ref": "#/components/schemas/StringSegment"
          },
          "isWeak": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "FileResult": {
        "type": "object",
        "properties": {
          "contentType": {
            "type": "string",
            "nullable": true
          },
          "fileDownloadName": {
            "type": "string",
            "nullable": true
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "entityTag": {
            "$ref": "#/components/schemas/EntityTagHeaderValue"
          },
          "enableRangeProcessing": {
            "type": "boolean"
          }
        }
      },
      "NullableOfCommerceMatchingType": {
        "enum": [
          "Perfect_Match",
          "Same_Product_Different_Quantity",
          "Same_Product_Different_Variant",
          "Same_Product_Different_Weight",
          "Similar_Product_Different_Brand",
          "Same_Product_Different_Weight_Quantity",
          "Wrong_Product",
          "Unset",
          "Not_Found",
          "Deleted",
          "User_Excluded",
          null
        ],
        "nullable": true
      },
      "NullableOfJsonElement": {
        "nullable": true
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "StringSegment": {
        "type": "object",
        "properties": {
          "buffer": {
            "type": "string",
            "nullable": true
          },
          "offset": {
            "type": "integer",
            "format": "int32"
          },
          "length": {
            "type": "integer",
            "format": "int32"
          },
          "value": {
            "type": "string",
            "nullable": true
          },
          "hasValue": {
            "type": "boolean"
          }
        }
      },
      "WebAPIServer.Infrastructure.RetailWorkspace.PreviewResourceVersionDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "version": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Infrastructure.RetailWorkspace.PreviewResponseDto": {
        "type": "object",
        "properties": {
          "preview_id": {
            "type": "string"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "impact": {
            "$ref": "#/components/schemas/NullableOfJsonElement"
          },
          "budget": {
            "$ref": "#/components/schemas/NullableOfJsonElement"
          },
          "resource_versions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Infrastructure.RetailWorkspace.PreviewResourceVersionDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.Common.ApiResponseOfApiKeyGenerationResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.ApiKeys.ApiKeyGenerationResultDto"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfCreditBalanceDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreditBalanceDto"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfCreditCheckoutSessionDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreditCheckoutSessionDto"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfCreditPackCatalogDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreditPackCatalogDto"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfCreditPurchaseConfirmationDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreditPurchaseConfirmationDto"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfDeveloperAccountDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperAccountDto"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfDeveloperIdentityChallengeResponseDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.DeveloperIdentityChallengeResponseDto"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfString": {
        "type": "object",
        "properties": {
          "data": {
            "type": "string",
            "nullable": true
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.Common.ApiResponseOfSystem.Collections.Generic.IEnumerableOfApiKeyDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.ApiKeys.ApiKeyDto"
            },
            "nullable": true
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.ApiKeys.ApiKeyDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "keyPrefix": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastUsedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "usageCount": {
            "type": "integer",
            "format": "int64"
          },
          "createdByEmail": {
            "type": "string"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "effectiveScope": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.ApiKeys.ApiKeyGenerationResultDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "keyPrefix": {
            "type": "string"
          },
          "rawKey": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceCanonicalIdentityDto": {
        "type": "object",
        "properties": {
          "canonical_id": {
            "type": "string",
            "nullable": true
          },
          "canonical_name": {
            "type": "string",
            "nullable": true
          },
          "canonical_url": {
            "type": "string",
            "nullable": true
          },
          "variant": {
            "type": "string",
            "nullable": true
          },
          "identifiers": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProductIdentifiersDto"
          },
          "matching_attributes": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceMatchingAttributesDto"
          },
          "confidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConfidenceDto"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceEvidenceDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceCanonicalIdentityDto2": {
        "type": "object",
        "properties": {
          "canonical_id": {
            "type": "string",
            "nullable": true
          },
          "canonical_name": {
            "type": "string",
            "nullable": true
          },
          "canonical_url": {
            "type": "string",
            "nullable": true
          },
          "variant": {
            "type": "string",
            "nullable": true
          },
          "identifiers": { },
          "matching_attributes": { },
          "confidence": { },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceEvidenceDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceConfidenceDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConfidenceStatus"
          },
          "score": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "matching_type": {
            "$ref": "#/components/schemas/NullableOfCommerceMatchingType"
          },
          "basis": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceConfidenceStatus": {
        "enum": [
          "supported",
          "unsupported",
          "ambiguous"
        ]
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceConstraintEvaluationDto": {
        "type": "object",
        "properties": {
          "merchant": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConstraintStatus"
          },
          "category": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConstraintStatus"
          },
          "price": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConstraintStatus"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceConstraintStatus": {
        "enum": [
          "satisfied",
          "not_satisfied",
          "not_extracted",
          "unsupported"
        ]
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceDeepSearchRequestDto": {
        "required": [
          "reason",
          "market"
        ],
        "type": "object",
        "properties": {
          "query": {
            "maxLength": 256,
            "minLength": 2,
            "type": "string",
            "nullable": true
          },
          "product": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProductIdentityInputDto2"
          },
          "reason": {
            "maxLength": 512,
            "minLength": 3,
            "type": "string"
          },
          "market": {
            "pattern": "^[A-Za-z]{2}$",
            "type": "string"
          },
          "merchant_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "category_terms": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "price": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommercePriceConstraintsDto"
          },
          "budget": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceWorkBudgetDto"
          },
          "callback_url": {
            "maxLength": 2048,
            "minLength": 1,
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceDeepSearchResponseDto": {
        "type": "object",
        "properties": {
          "research_focus": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceResearchFocus"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSearchCandidateDto"
            }
          },
          "discovered_retailers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceDiscoveredRetailerDto"
            }
          },
          "discovered_pages": {
            "type": "array",
            "items": { }
          },
          "ambiguity_notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceOperationStatus"
          },
          "market": {
            "type": "string"
          },
          "failures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProviderFailureDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceDiscoveredRetailerDto": {
        "type": "object",
        "properties": {
          "merchant_id": {
            "type": "string"
          },
          "merchant_name": {
            "type": "string"
          },
          "result_count": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "error_code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "invalid_fields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto2": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "error_code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "invalid_fields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceEvidenceDto": {
        "type": "object",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceEvidenceKind"
          },
          "merchant_id": {
            "type": "string",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "rank": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "field": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "$ref": "#/components/schemas/NullableOfJsonElement"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceEvidenceKind": {
        "enum": [
          "search_result",
          "product_page",
          "extracted_field",
          "classification"
        ]
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceFindOffersRequestDto": {
        "required": [
          "identity",
          "market"
        ],
        "type": "object",
        "properties": {
          "identity": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProductIdentityInputDto"
          },
          "market": {
            "pattern": "^[A-Za-z]{2}$",
            "type": "string"
          },
          "merchant_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "category_terms": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "price": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommercePriceConstraintsDto"
          },
          "budget": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceWorkBudgetDto"
          },
          "callback_url": {
            "maxLength": 2048,
            "minLength": 1,
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceFindOffersResponseDto": {
        "type": "object",
        "properties": {
          "identity": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProductIdentityInputDto"
          },
          "offers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceOfferDto2"
            }
          },
          "ambiguity_notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceOperationStatus"
          },
          "market": {
            "type": "string"
          },
          "failures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProviderFailureDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceJobDto": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "poll_url": {
            "type": "string"
          },
          "poll_after_ms": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "submitted_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "units_charged": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "callback_registered": {
            "type": "boolean"
          },
          "result": {
            "$ref": "#/components/schemas/NullableOfJsonElement"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceErrorResponseDto2"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceMatchingAttributesDto": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "nullable": true
          },
          "model": {
            "type": "string",
            "nullable": true
          },
          "weight": {
            "type": "string",
            "nullable": true
          },
          "weight_unit": {
            "type": "string",
            "nullable": true
          },
          "volume": {
            "type": "string",
            "nullable": true
          },
          "volume_unit": {
            "type": "string",
            "nullable": true
          },
          "quantity": {
            "type": "string",
            "nullable": true
          },
          "variant": {
            "type": "string",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "size": {
            "type": "string",
            "nullable": true
          },
          "material": {
            "type": "string",
            "nullable": true
          },
          "style": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceOfferDto": {
        "type": "object",
        "properties": {
          "merchant_id": {
            "type": "string"
          },
          "merchant_name": {
            "type": "string"
          },
          "product_name": {
            "type": "string",
            "nullable": true
          },
          "product_url": {
            "type": "string"
          },
          "canonical_id": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto"
          },
          "stock": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto"
          },
          "shipping": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto"
          },
          "identity_confidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConfidenceDto"
          },
          "constraints": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConstraintEvaluationDto"
          },
          "evidence": {
            "type": "array",
            "items": { }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceOfferDto2": {
        "type": "object",
        "properties": {
          "merchant_id": {
            "type": "string"
          },
          "merchant_name": {
            "type": "string"
          },
          "product_name": {
            "type": "string",
            "nullable": true
          },
          "product_url": {
            "type": "string"
          },
          "canonical_id": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto"
          },
          "stock": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto"
          },
          "shipping": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto"
          },
          "identity_confidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConfidenceDto"
          },
          "constraints": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConstraintEvaluationDto"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceEvidenceDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceOperationStatus": {
        "enum": [
          "complete",
          "partial",
          "no_results",
          "ambiguous"
        ]
      },
      "WebAPIServer.Models.DTOs.Commerce.CommercePriceConstraintsDto": {
        "type": "object",
        "properties": {
          "minimum": {
            "minimum": 0,
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "maximum": {
            "minimum": 0,
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "maxLength": 3,
            "minLength": 3,
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceProductIdentifiersDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "product_id_source": {
            "type": "string",
            "nullable": true
          },
          "sku": {
            "type": "string",
            "nullable": true
          },
          "mpn": {
            "type": "string",
            "nullable": true
          },
          "gtins": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceProductIdentityInputDto": {
        "type": "object",
        "properties": {
          "canonical_id": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "canonical_name": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "variant": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "model": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "sku": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "barcode": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "gtin": {
            "pattern": "^(?:[0-9]{8}|[0-9]{12,14})$",
            "type": "string",
            "nullable": true
          },
          "brand": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "description": {
            "maxLength": 4000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "source_url": {
            "maxLength": 2048,
            "minLength": 1,
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceProductIdentityInputDto2": {
        "type": "object",
        "properties": {
          "canonical_id": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "canonical_name": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "variant": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "model": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "sku": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "barcode": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "gtin": {
            "pattern": "^(?:[0-9]{8}|[0-9]{12,14})$",
            "type": "string",
            "nullable": true
          },
          "brand": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "description": {
            "maxLength": 4000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "source_url": {
            "maxLength": 2048,
            "minLength": 1,
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceProviderFailureDto": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "merchant_id": {
            "type": "string",
            "nullable": true
          },
          "retryable": {
            "type": "boolean"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceResearchFocus": {
        "enum": [
          "general",
          "price",
          "availability",
          "retailer_discovery",
          "identity",
          "shipping"
        ]
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceResolveProductRequestDto": {
        "required": [
          "market"
        ],
        "type": "object",
        "properties": {
          "market": {
            "pattern": "^[A-Za-z]{2}$",
            "type": "string"
          },
          "title": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "url": {
            "maxLength": 2048,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "description": {
            "maxLength": 4000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "model": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "sku": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "barcode": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "gtin": {
            "pattern": "^(?:[0-9]{8}|[0-9]{12,14})$",
            "type": "string",
            "nullable": true
          },
          "merchant_id": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "budget": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceWorkBudgetDto"
          },
          "callback_url": {
            "maxLength": 2048,
            "minLength": 1,
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceResolveProductResponseDto": {
        "type": "object",
        "properties": {
          "identity": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceCanonicalIdentityDto"
          },
          "alternatives": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceCanonicalIdentityDto2"
            }
          },
          "ambiguity_notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceOperationStatus"
          },
          "market": {
            "type": "string"
          },
          "failures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProviderFailureDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceSearchCandidateDto": {
        "type": "object",
        "properties": {
          "merchant_id": {
            "type": "string"
          },
          "merchant_name": {
            "type": "string"
          },
          "serp_rank": {
            "type": "integer",
            "format": "int32"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "identity": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceCanonicalIdentityDto"
          },
          "representative_offer": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceOfferDto"
          },
          "extraction_probability": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto"
          },
          "constraints": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceConstraintEvaluationDto"
          },
          "evidence": {
            "type": "array",
            "items": { }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceSearchProductsRequestDto": {
        "required": [
          "query",
          "market"
        ],
        "type": "object",
        "properties": {
          "query": {
            "maxLength": 256,
            "minLength": 2,
            "type": "string"
          },
          "market": {
            "pattern": "^[A-Za-z]{2}$",
            "type": "string"
          },
          "merchant_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "category_terms": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "price": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommercePriceConstraintsDto"
          },
          "budget": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceWorkBudgetDto"
          },
          "callback_url": {
            "maxLength": 2048,
            "minLength": 1,
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceSearchProductsResponseDto": {
        "type": "object",
        "properties": {
          "candidates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSearchCandidateDto"
            }
          },
          "status": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceOperationStatus"
          },
          "market": {
            "type": "string"
          },
          "failures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceProviderFailureDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceSupportedValueDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Commerce.CommerceSupportStatus"
          },
          "value": {
            "$ref": "#/components/schemas/NullableOfJsonElement"
          },
          "currency": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceSupportStatus": {
        "enum": [
          "extracted",
          "not_extracted",
          "unsupported"
        ]
      },
      "WebAPIServer.Models.DTOs.Commerce.CommerceWorkBudgetDto": {
        "type": "object",
        "properties": {
          "max_results": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer",
            "format": "int32",
            "default": 20
          },
          "max_candidates": {
            "maximum": 20,
            "minimum": 1,
            "type": "integer",
            "format": "int32",
            "default": 12
          },
          "max_merchants": {
            "maximum": 8,
            "minimum": 1,
            "type": "integer",
            "format": "int32",
            "default": 6
          },
          "max_pages": {
            "maximum": 25,
            "minimum": 1,
            "type": "integer",
            "format": "int32",
            "default": 12
          },
          "max_extractions": {
            "maximum": 20,
            "minimum": 1,
            "type": "integer",
            "format": "int32",
            "default": 8
          },
          "deadline_seconds": {
            "maximum": 540,
            "minimum": 1,
            "type": "number",
            "format": "double",
            "default": 540
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Developer.CreateCreditCheckoutRequestDto": {
        "required": [
          "packId",
          "successUrl",
          "cancelUrl"
        ],
        "type": "object",
        "properties": {
          "packId": {
            "maxLength": 64,
            "minLength": 0,
            "type": "string"
          },
          "successUrl": {
            "maxLength": 2048,
            "minLength": 0,
            "type": "string"
          },
          "cancelUrl": {
            "maxLength": 2048,
            "minLength": 0,
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Developer.CreateDeveloperApiKeyRequestDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 100,
            "minLength": 3,
            "type": "string"
          },
          "expirationDays": {
            "maximum": 365,
            "minimum": 1,
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Developer.CreditBalanceDto": {
        "type": "object",
        "properties": {
          "balanceDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "lifetimePurchasedDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "lifetimeGrantedDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "lifetimeConsumedDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "billingCycleId": {
            "type": "string"
          },
          "tier": {
            "type": "string"
          },
          "monthlyQuotaUnits": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "monthlyUsedUnits": {
            "type": "integer",
            "format": "int64"
          },
          "monthlyRemainingUnits": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "totalAvailableDataPoints": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "monthlyFreeGrantDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "nextFreeGrantAtUtc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Developer.CreditCheckoutSessionDto": {
        "type": "object",
        "properties": {
          "checkoutUrl": {
            "type": "string"
          },
          "sessionId": {
            "type": "string"
          },
          "packId": {
            "type": "string"
          },
          "dataPoints": {
            "type": "integer",
            "format": "int64"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Developer.CreditPackCatalogDto": {
        "type": "object",
        "properties": {
          "packs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Developer.CreditPackDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Developer.CreditPackDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "priceUsd": {
            "type": "number",
            "format": "double"
          },
          "dataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "ratePerDataPoint": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Developer.CreditPurchaseConfirmationDto": {
        "type": "object",
        "properties": {
          "checkoutSessionId": {
            "type": "string"
          },
          "credited": {
            "type": "boolean"
          },
          "dataPointsCredited": {
            "type": "integer",
            "format": "int64"
          },
          "balanceAfterDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "creditedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Developer.DeveloperAccountDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "developerWorkspaceId": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string"
          },
          "tier": {
            "type": "string"
          },
          "termsAccepted": {
            "type": "boolean"
          },
          "maxActiveKeys": {
            "type": "integer",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Developer.DeveloperIdentityChallengeRequestDto": {
        "required": [
          "email"
        ],
        "type": "object",
        "properties": {
          "email": {
            "maxLength": 256,
            "minLength": 3,
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Developer.DeveloperIdentityChallengeResponseDto": {
        "type": "object",
        "properties": {
          "challengeId": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "deliveryMethod": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Developer.DeveloperSignupRequestDto": {
        "type": "object",
        "properties": {
          "challengeId": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "acceptTerms": {
            "type": "boolean"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectCredentialRequestDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 100,
            "minLength": 3,
            "type": "string"
          },
          "expirationDays": {
            "maximum": 365,
            "minimum": 1,
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.CreateDeveloperProjectRequestDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 100,
            "minLength": 3,
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectBillingDto": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "planCode": {
            "type": "string"
          },
          "portalAvailable": {
            "type": "boolean"
          },
          "currentPeriodStart": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "currentPeriodEnd": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCredentialDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "keyPrefix": {
            "type": "string"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastUsedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "usageCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCredentialSecretDto": {
        "type": "object",
        "properties": {
          "credential": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCredentialDto"
          },
          "secret": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditCheckoutDto": {
        "type": "object",
        "properties": {
          "checkoutUrl": {
            "type": "string"
          },
          "sessionId": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditCheckoutRequestDto": {
        "required": [
          "packCode",
          "successUrl",
          "cancelUrl"
        ],
        "type": "object",
        "properties": {
          "packCode": {
            "maxLength": 64,
            "minLength": 0,
            "type": "string"
          },
          "successUrl": {
            "maxLength": 2048,
            "minLength": 0,
            "type": "string"
          },
          "cancelUrl": {
            "maxLength": 2048,
            "minLength": 0,
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditPackDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "priceCents": {
            "type": "integer",
            "format": "int64"
          },
          "currency": {
            "type": "string"
          },
          "dataPoints": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditPurchaseDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "creditedDataPoints": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditsSummaryDto": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "balance": {
            "type": "integer",
            "format": "int64"
          },
          "unit": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "freeGrantApplied": {
            "type": "boolean"
          },
          "monthlyFreeGrantDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "nextFreeGrantAtUtc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "packs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditPackDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "accountId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "resourceType": {
            "type": "string"
          },
          "resourceLabel": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "isInitial": {
            "type": "boolean"
          },
          "settings": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectSettingsDto"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastAccessedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectDto2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "accountId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "resourceType": {
            "type": "string"
          },
          "resourceLabel": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "isInitial": {
            "type": "boolean"
          },
          "settings": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectSettingsDto"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastAccessedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectQuotaDto": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "planCode": {
            "type": "string"
          },
          "monthlyRequestLimit": {
            "type": "integer",
            "format": "int64"
          },
          "monthlyRequestsUsed": {
            "type": "integer",
            "format": "int64"
          },
          "monthlyRequestsRemaining": {
            "type": "integer",
            "format": "int64"
          },
          "isConfigured": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectSettingsDto": {
        "type": "object",
        "properties": {
          "usageAlertsEnabled": {
            "type": "boolean"
          },
          "usageAlertThresholdPercent": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectSettingsDto2": {
        "type": "object",
        "properties": {
          "usageAlertsEnabled": {
            "type": "boolean"
          },
          "usageAlertThresholdPercent": {
            "type": "integer",
            "format": "int32"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectUsageDto": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "requestsUsed": {
            "type": "integer",
            "format": "int64"
          },
          "periodStart": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "periodEnd": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lastUpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.InitialDeveloperProjectResultDto": {
        "type": "object",
        "properties": {
          "created": {
            "type": "boolean"
          },
          "project": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectDto"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectRequestDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 100,
            "minLength": 3,
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.DeveloperProjects.UpdateDeveloperProjectSettingsRequestDto": {
        "type": "object",
        "properties": {
          "usageAlertsEnabled": {
            "type": "boolean",
            "nullable": true
          },
          "usageAlertThresholdPercent": {
            "maximum": 100,
            "minimum": 1,
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Estimation.EstimateAssumptionDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Estimation.EstimateWindowDto": {
        "type": "object",
        "properties": {
          "start_utc": {
            "type": "string",
            "format": "date-time"
          },
          "end_utc": {
            "type": "string",
            "format": "date-time"
          },
          "basis": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Identity.ApiKeyIdentityCompatibilityDataDto": {
        "type": "object",
        "properties": {
          "resourceKind": {
            "type": "string"
          },
          "ownerId": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Identity.DeveloperProjectApiKeyIdentityDto": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "credentialKind": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.ApiKeyIdentityCompatibilityDataDto"
          }
        }
      },
      "WebAPIServer.Models.DTOs.Identity.DeveloperProjectApiKeyIdentityDto2": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "credentialKind": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.ApiKeyIdentityCompatibilityDataDto"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.Identity.WorkspaceApiKeyIdentityDto": {
        "type": "object",
        "properties": {
          "workspaceId": {
            "type": "string"
          },
          "credentialKind": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.ApiKeyIdentityCompatibilityDataDto"
          },
          "subject_id": {
            "type": "string",
            "nullable": true
          },
          "workspace_id": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "permissions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "credential_kind": {
            "type": "string",
            "nullable": true
          },
          "client_id": {
            "type": "string",
            "nullable": true
          },
          "grant_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.Identity.WorkspaceApiKeyIdentityDto2": {
        "type": "object",
        "properties": {
          "workspaceId": {
            "type": "string"
          },
          "credentialKind": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.ApiKeyIdentityCompatibilityDataDto"
          },
          "subject_id": {
            "type": "string",
            "nullable": true
          },
          "workspace_id": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "permissions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "credential_kind": {
            "type": "string",
            "nullable": true
          },
          "client_id": {
            "type": "string",
            "nullable": true
          },
          "grant_id": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.MatchCorrections.CompetitorMatchesDto": {
        "required": [
          "competitor_vendor_id",
          "pair_state",
          "pair_source"
        ],
        "type": "object",
        "properties": {
          "competitor_vendor_id": {
            "type": "string"
          },
          "competitor_name": {
            "type": "string",
            "nullable": true
          },
          "is_configured": {
            "type": "boolean"
          },
          "is_scanned_for_product": {
            "type": "boolean"
          },
          "pair_state": {
            "type": "string"
          },
          "pair_source": {
            "type": "string"
          },
          "pair_actor_id": {
            "type": "string",
            "nullable": true
          },
          "pair_updated_at": {
            "type": "string",
            "nullable": true
          },
          "pair_reason": {
            "type": "string",
            "nullable": true
          },
          "problem": {
            "type": "string",
            "nullable": true
          },
          "candidates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.MatchCorrections.MatchCandidateDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.MatchCorrections.MatchAiVerdictDto": {
        "type": "object",
        "properties": {
          "matching_type": {
            "type": "string",
            "nullable": true
          },
          "confidence": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "is_selected": {
            "type": "boolean",
            "nullable": true
          },
          "evaluated_at": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.MatchCorrections.MatchCandidateDto": {
        "required": [
          "mapping_id",
          "target_product_id",
          "matching_type",
          "state",
          "source",
          "derived_from"
        ],
        "type": "object",
        "properties": {
          "mapping_id": {
            "type": "string"
          },
          "target_product_id": {
            "type": "string"
          },
          "target_product_url": {
            "type": "string",
            "nullable": true
          },
          "target_product_name": {
            "type": "string",
            "nullable": true
          },
          "matching_type": {
            "type": "string"
          },
          "matching_type_source": {
            "type": "string",
            "nullable": true
          },
          "confidence": {
            "type": "integer",
            "format": "int32"
          },
          "is_selected": {
            "type": "boolean"
          },
          "is_primary": {
            "type": "boolean"
          },
          "state": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "derived_from": {
            "type": "string"
          },
          "usable_manual_selection": {
            "type": "boolean"
          },
          "actor_id": {
            "type": "string",
            "nullable": true
          },
          "state_updated_at": {
            "type": "string",
            "nullable": true
          },
          "selected_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "deselected_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "ai_verdict": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.MatchCorrections.MatchAiVerdictDto"
          },
          "health": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.MatchCorrections.MatchHealthDto"
          },
          "price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "price_observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.MatchCorrections.MatchHealthDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "nullable": true
          },
          "problem_code": {
            "type": "string",
            "nullable": true
          },
          "consecutive_failures": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "last_failed_at": {
            "type": "string",
            "nullable": true
          },
          "last_ok_at": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.MatchCorrections.ProductMatchesDto": {
        "required": [
          "tracked_product_id"
        ],
        "type": "object",
        "properties": {
          "contract_version": {
            "type": "string"
          },
          "tracked_product_id": {
            "type": "string"
          },
          "is_tracked": {
            "type": "boolean"
          },
          "competitors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.MatchCorrections.CompetitorMatchesDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.ColdMissBudgetDto": {
        "type": "object",
        "properties": {
          "limitRequests": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "usedRequests": {
            "type": "integer",
            "format": "int32"
          },
          "remainingRequests": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "usedLiveScanUnits": {
            "type": "integer",
            "format": "int64"
          },
          "reservedLiveScanUnits": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.CompetitorOverviewDto": {
        "type": "object",
        "properties": {
          "totalTrackedProducts": {
            "type": "integer",
            "format": "int32"
          },
          "totalCompetitors": {
            "type": "integer",
            "format": "int32"
          },
          "productsBeingUndercut": {
            "type": "integer",
            "format": "int32"
          },
          "productsBelowMarket": {
            "type": "integer",
            "format": "int32"
          },
          "topCompetitors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CompetitorSummaryDto"
            }
          },
          "unknownCompetitorUrls": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "derived_from": {
            "type": "string",
            "nullable": true
          },
          "last_scan_id": {
            "type": "string",
            "nullable": true
          },
          "last_scan_completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.CompetitorSummaryDto": {
        "type": "object",
        "properties": {
          "vendorId": {
            "type": "string"
          },
          "vendorName": {
            "type": "string"
          },
          "overlappingProducts": {
            "type": "integer",
            "format": "int32"
          },
          "cheaperCount": {
            "type": "integer",
            "format": "int32"
          },
          "moreExpensiveCount": {
            "type": "integer",
            "format": "int32"
          },
          "averagePriceGapPercent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "products_with_open_insights": {
            "type": "integer",
            "format": "int32"
          },
          "count_basis": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.CustomerPortfolioPositionDto": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "nullable": true
          },
          "timeframe": {
            "type": "string"
          },
          "totalTrackedProducts": {
            "type": "integer",
            "format": "int32"
          },
          "productsAnalyzed": {
            "type": "integer",
            "format": "int32"
          },
          "averagePercentileRank": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "averageGapToCheapest": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CustomerPositionDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.CustomerPositionCompetitorPriceDto": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string"
          },
          "competitor_name": {
            "type": "string"
          },
          "competitor_product_id": {
            "type": "string"
          },
          "price": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "observed_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.CustomerPositionDto": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "customerPrice": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "marketAverage": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "percentileRank": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "gapToCheapest": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "gapToMostExpensive": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "competitor_count": {
            "type": "integer",
            "format": "int32"
          },
          "competitors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CustomerPositionCompetitorPriceDto"
            }
          },
          "excluded_other_currency_count": {
            "type": "integer",
            "format": "int32"
          },
          "market_basis": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.CustomerPositionDto2": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "customerPrice": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "marketAverage": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "percentileRank": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "gapToCheapest": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "gapToMostExpensive": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "competitor_count": {
            "type": "integer",
            "format": "int32"
          },
          "competitors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CustomerPositionCompetitorPriceDto"
            }
          },
          "excluded_other_currency_count": {
            "type": "integer",
            "format": "int32"
          },
          "market_basis": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.CustomerProductDto": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "sku": {
            "type": "string",
            "nullable": true
          },
          "brand": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "scanStatus": {
            "type": "string",
            "nullable": true
          },
          "lastScanDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "competitorCount": {
            "type": "integer",
            "format": "int32"
          },
          "currentPrice": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "productUrl": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.EngineUsageResponseDto": {
        "type": "object",
        "properties": {
          "apiKeyId": {
            "type": "string"
          },
          "tier": {
            "type": "string"
          },
          "billingCycleId": {
            "type": "string"
          },
          "cycleStartUtc": {
            "type": "string",
            "format": "date-time"
          },
          "cycleEndUtc": {
            "type": "string",
            "format": "date-time"
          },
          "usedUnits": {
            "type": "integer",
            "format": "int64"
          },
          "reservedUnits": {
            "type": "integer",
            "format": "int64"
          },
          "quotaUnits": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "remainingUnits": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "percentUsed": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "coldMissBudget": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.ColdMissBudgetDto"
          },
          "rateLimit": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.UsageRateLimitDto"
          },
          "upgrade": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.UsageUpgradeDto"
          },
          "credits": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.UsageCreditsDto"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.InsightSummaryDto": {
        "type": "object",
        "properties": {
          "insightId": {
            "type": "string"
          },
          "insightType": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "productName": {
            "type": "string"
          },
          "productSku": {
            "type": "string",
            "nullable": true
          },
          "whatChanged": {
            "type": "string"
          },
          "whyItMatters": {
            "type": "string"
          },
          "recommendation": {
            "type": "string",
            "nullable": true
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "insight": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightDto"
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "tracked_product_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "scan_id": {
            "type": "string",
            "nullable": true
          },
          "valid_until": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "confidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightConfidenceDto2"
          },
          "recommendation_action": {
            "type": "string",
            "nullable": true
          },
          "suggested_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "suggested_price_basis": {
            "type": "string",
            "nullable": true
          },
          "why_it_matters_assumptions": {
            "type": "string",
            "nullable": true
          },
          "competitor_prices": {
            "type": "array",
            "items": { },
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PaginationMeta": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "format": "int32"
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          },
          "hasNextPage": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.PriceChangeDto": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "productName": {
            "type": "string"
          },
          "vendorId": {
            "type": "string"
          },
          "vendorName": {
            "type": "string"
          },
          "previousPrice": {
            "type": "number",
            "format": "double"
          },
          "currentPrice": {
            "type": "number",
            "format": "double"
          },
          "changeAmount": {
            "type": "number",
            "format": "double"
          },
          "changePercent": {
            "type": "number",
            "format": "double"
          },
          "direction": {
            "type": "string"
          },
          "detectedAt": {
            "type": "string",
            "format": "date-time"
          },
          "change_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_product_id": {
            "type": "string",
            "nullable": true
          },
          "previous_observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PriceSeriesPointDto": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "averagePrice": {
            "type": "number",
            "format": "double"
          },
          "minPrice": {
            "type": "number",
            "format": "double"
          },
          "maxPrice": {
            "type": "number",
            "format": "double"
          },
          "observationCount": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedError": {
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "nullable": true
          },
          "requestId": {
            "type": "string"
          },
          "documentationUrl": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedErrorResponse": {
        "type": "object",
        "properties": {
          "data": { },
          "meta": { },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiDetailedError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiError": {
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "string",
            "nullable": true
          },
          "requestId": {
            "type": "string"
          },
          "documentationUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCompetitorOverviewDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CompetitorOverviewDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPortfolioPositionDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CustomerPortfolioPositionDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfCustomerPositionDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CustomerPositionDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectApiKeyIdentityDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.DeveloperProjectApiKeyIdentityDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectBillingDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectBillingDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCredentialSecretDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCredentialSecretDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditCheckoutDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditCheckoutDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditPurchaseDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditPurchaseDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectCreditsSummaryDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCreditsSummaryDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectQuotaDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectQuotaDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectSettingsDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectSettingsDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfDeveloperProjectUsageDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectUsageDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfEngineUsageResponseDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.EngineUsageResponseDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfInitialDeveloperProjectResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.InitialDeveloperProjectResultDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfObject": {
        "type": "object",
        "properties": {
          "data": { },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfPreviewResponseDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Infrastructure.RetailWorkspace.PreviewResponseDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailAlertRuleDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorApplyResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorApplyResultDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorDetailDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorDetailDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailCompetitorListDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorListDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailDeletedDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailDeletedDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInsightDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailInvitationDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInvitationDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarketDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarketDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMarkNotificationsReadResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarkNotificationsReadResultDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchCorrectionResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchCorrectionResultDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailMatchJobDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchJobDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailNotificationListDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailNotificationListDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceMatrixDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailPriceTableDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceTableDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductApplyResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductApplyResultDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductDetailDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductDetailDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailProductMatchesDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductMatchesDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailReportPreferencesDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Services.RetailWorkspace.V1.RetailReportPreferencesDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanDetailDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanDetailDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScanStartedDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanStartedDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleApplyResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleApplyResultDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailScheduleListDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleListDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailSetupStatusDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailSetupStatusDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailTeamDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailTeamMemberDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailTeamMemberDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfRetailUrlCorrectionStartedDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionStartedDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfScanReportCsvDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.ScanReportCsvDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfString": {
        "type": "object",
        "properties": {
          "data": {
            "type": "string",
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectCredentialDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectCredentialDto"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.IReadOnlyListOfDeveloperProjectDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.DeveloperProjects.DeveloperProjectDto"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfCustomerProductDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.CustomerProductDto"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfInsightSummaryDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.InsightSummaryDto"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfPriceChangeDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PriceChangeDto"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfSystem.Collections.Generic.ListOfScanResultDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.ScanResultDto"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailAlertRuleDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailAlertRuleDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailInsightDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailInsightDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspaceApiKeyIdentityDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Identity.WorkspaceApiKeyIdentityDto2"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.PublicApiResponseOfWorkspacePriceHistorySeriesDto": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.WorkspacePriceHistorySeriesDto"
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertDeliveryDto": {
        "type": "object",
        "properties": {
          "in_app": {
            "type": "boolean"
          },
          "email": {
            "type": "boolean"
          },
          "recipient": {
            "type": "string"
          },
          "note": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleDto": {
        "type": "object",
        "properties": {
          "rule_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "condition_type": {
            "type": "string"
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "product_name": {
            "type": "string",
            "nullable": true
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_name": {
            "type": "string",
            "nullable": true
          },
          "threshold_value": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "currency_note": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "delivery": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertDeliveryDto"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_triggered_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "etag": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleDto2": {
        "type": "object",
        "properties": {
          "rule_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "condition_type": {
            "type": "string"
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "product_name": {
            "type": "string",
            "nullable": true
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_name": {
            "type": "string",
            "nullable": true
          },
          "threshold_value": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "currency_note": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "delivery": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertDeliveryDto"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_triggered_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "etag": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "condition_type": {
            "type": "string",
            "nullable": true
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "threshold_value": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "enabled": {
            "type": "boolean",
            "nullable": true
          },
          "email_notifications": {
            "type": "boolean",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleToggleRequest": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsFiltersDto": {
        "type": "object",
        "properties": {
          "scan_id": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "subcategory": {
            "type": "string",
            "nullable": true
          },
          "owner": {
            "type": "string",
            "nullable": true
          },
          "competitors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "q": {
            "type": "string",
            "nullable": true
          },
          "matched_only": {
            "type": "boolean"
          },
          "in_stock_only": {
            "type": "boolean"
          },
          "include_similar": {
            "type": "boolean"
          },
          "period": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsWarningDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "rates_as_of": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailBasketRowDto": {
        "type": "object",
        "properties": {
          "competitor": {
            "type": "string"
          },
          "matched_products": {
            "type": "integer",
            "format": "int32"
          },
          "competitor_basket_total": {
            "type": "number",
            "format": "double"
          },
          "your_basket_total": {
            "type": "number",
            "format": "double"
          },
          "variation_percent": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailBasketTrendDto": {
        "type": "object",
        "properties": {
          "competitor": {
            "type": "string"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailBasketTrendPointDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailBasketTrendPointDto": {
        "type": "object",
        "properties": {
          "scan_date": {
            "type": "string",
            "format": "date-time"
          },
          "variation_percent": {
            "type": "number",
            "format": "double"
          },
          "competitor_basket_total": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCapacityDto": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "used_before": {
            "type": "integer",
            "format": "int32"
          },
          "used_after": {
            "type": "integer",
            "format": "int32"
          },
          "available_after": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorApplyResultDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          },
          "applied_count": {
            "type": "integer",
            "format": "int32"
          },
          "failed_count": {
            "type": "integer",
            "format": "int32"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorItemResultDto"
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorChangeRequest": {
        "type": "object",
        "properties": {
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorOperationDto"
            },
            "nullable": true
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorCoverageDto": {
        "type": "object",
        "properties": {
          "competitor": {
            "type": "string"
          },
          "products_with_price": {
            "type": "integer",
            "format": "int32"
          },
          "percent_of_products": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorDetailDto": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "base_url": {
            "type": "string",
            "nullable": true
          },
          "last_scanned_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "perfect_match_count": {
            "type": "integer",
            "format": "int32"
          },
          "similar_match_count": {
            "type": "integer",
            "format": "int32"
          },
          "matched_products": {
            "type": "integer",
            "format": "int32"
          },
          "tracked_products": {
            "type": "integer",
            "format": "int32"
          },
          "percent_products_with_data": {
            "type": "number",
            "format": "double"
          },
          "cheaper_than_you_percent": {
            "type": "number",
            "format": "double"
          },
          "cheaper_than_you_trend": {
            "type": "string"
          },
          "average_undercut_absolute": {
            "type": "number",
            "format": "double"
          },
          "average_undercut_percent": {
            "type": "number",
            "format": "double"
          },
          "out_of_stock_count": {
            "type": "integer",
            "format": "int32"
          },
          "currency": {
            "type": "string"
          },
          "recent_changes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorPriceChangeDto"
            }
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorDto": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string"
          },
          "competitor_document_id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "base_url": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string"
          },
          "onboarding_status": {
            "type": "string",
            "nullable": true
          },
          "include_in_default_scan": {
            "type": "boolean"
          },
          "in_default_set": {
            "type": "boolean"
          },
          "exclude_marketplace_products": {
            "type": "boolean",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "added_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "modified_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "usage": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorUsageDto"
          },
          "etag": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorItemResultDto": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "format": "int32"
          },
          "op": {
            "type": "string"
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_document_id": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailItemErrorDto"
          },
          "removal_impact": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorRemovalImpactDto"
          },
          "effects": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorLimitsDto": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "used": {
            "type": "integer",
            "format": "int32"
          },
          "remaining": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorListDto": {
        "type": "object",
        "properties": {
          "limits": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorLimitsDto"
          },
          "default_competitor_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default_set_fallback_all_active": {
            "type": "boolean"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorDto"
            }
          },
          "next_cursor": {
            "type": "string",
            "nullable": true
          },
          "has_more": {
            "type": "boolean"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "total_count": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorOperationDto": {
        "type": "object",
        "properties": {
          "op": {
            "type": "string",
            "nullable": true
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "base_url": {
            "type": "string",
            "nullable": true
          },
          "include_in_default_scan": {
            "type": "boolean",
            "nullable": true
          },
          "exclude_marketplace_products": {
            "type": "boolean",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorPriceChangeDto": {
        "type": "object",
        "properties": {
          "change_id": {
            "type": "string",
            "nullable": true
          },
          "product_id": {
            "type": "string"
          },
          "product_name": {
            "type": "string"
          },
          "previous_price": {
            "type": "number",
            "format": "double"
          },
          "current_price": {
            "type": "number",
            "format": "double"
          },
          "change_percent": {
            "type": "number",
            "format": "double"
          },
          "direction": {
            "type": "string"
          },
          "detected_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorRefDto": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorRemovalImpactDto": {
        "type": "object",
        "properties": {
          "inherit_losing_competitor": {
            "type": "integer",
            "format": "int32"
          },
          "explicit_will_narrow": {
            "type": "integer",
            "format": "int32"
          },
          "explicit_will_block": {
            "type": "integer",
            "format": "int32"
          },
          "blocked_product_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "blocked_product_ids_truncated": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorUsageDto": {
        "type": "object",
        "properties": {
          "scanned_products": {
            "type": "integer",
            "format": "int32"
          },
          "inheriting_products": {
            "type": "integer",
            "format": "int32"
          },
          "explicit_products": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailConfigIssueDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCoverageDto": {
        "type": "object",
        "properties": {
          "products_in_view": {
            "type": "integer",
            "format": "int32"
          },
          "products_with_competitor_data": {
            "type": "integer",
            "format": "int32"
          },
          "percent_with_competitor_data": {
            "type": "number",
            "format": "double"
          },
          "by_competitor": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorCoverageDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCreateInvitationRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCustomScheduleDto": {
        "type": "object",
        "properties": {
          "active_days": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "scan_times": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailDeletedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "deleted": {
            "type": "boolean"
          },
          "deleted_at": {
            "type": "string",
            "format": "date-time"
          },
          "side_effects": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailFreshnessDto": {
        "type": "object",
        "properties": {
          "scan_id": {
            "type": "string",
            "nullable": true
          },
          "scan_completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "latest_completed_scan_id": {
            "type": "string",
            "nullable": true
          },
          "latest_completed_scan_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightActionTakenDto": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string"
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "taken_at": {
            "type": "string",
            "format": "date-time"
          },
          "recorded_only": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightConfidenceDto": {
        "type": "object",
        "properties": {
          "level": {
            "type": "string"
          },
          "score": {
            "type": "number",
            "format": "double"
          },
          "single_evidence": {
            "type": "boolean"
          },
          "has_multiple_sources": {
            "type": "boolean"
          },
          "match_quality_high": {
            "type": "boolean"
          },
          "has_recent_data": {
            "type": "boolean"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightConfidenceDto2": {
        "type": "object",
        "properties": {
          "level": {
            "type": "string"
          },
          "score": {
            "type": "number",
            "format": "double"
          },
          "single_evidence": {
            "type": "boolean"
          },
          "has_multiple_sources": {
            "type": "boolean"
          },
          "match_quality_high": {
            "type": "boolean"
          },
          "has_recent_data": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightDto": {
        "type": "object",
        "properties": {
          "insight_id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "stored_type": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "product": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightProductDto"
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "scan_id": {
            "type": "string",
            "nullable": true
          },
          "job_id": {
            "type": "string",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_until": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "is_marketplace": {
            "type": "boolean"
          },
          "is_third_party_seller": {
            "type": "boolean"
          },
          "what_changed": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightWhatChangedDto"
          },
          "why_it_matters": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightWhyItMattersDto"
          },
          "recommendation": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightRecommendationDto"
          },
          "confidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightConfidenceDto"
          },
          "metrics": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightMetricsDto"
          },
          "evidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightEvidenceDto"
          },
          "lifecycle": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightLifecycleDto"
          },
          "etag": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightDto2": {
        "type": "object",
        "properties": {
          "insight_id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "stored_type": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "product": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightProductDto"
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "scan_id": {
            "type": "string",
            "nullable": true
          },
          "job_id": {
            "type": "string",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_until": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "is_marketplace": {
            "type": "boolean"
          },
          "is_third_party_seller": {
            "type": "boolean"
          },
          "what_changed": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightWhatChangedDto"
          },
          "why_it_matters": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightWhyItMattersDto"
          },
          "recommendation": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightRecommendationDto"
          },
          "confidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightConfidenceDto"
          },
          "metrics": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightMetricsDto"
          },
          "evidence": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightEvidenceDto"
          },
          "lifecycle": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightLifecycleDto"
          },
          "etag": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightEvidenceDto": {
        "type": "object",
        "properties": {
          "your_price": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightPriceObservationDto"
          },
          "competitor_prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightPriceObservationDto2"
            }
          },
          "match_basis": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightLifecycleDto": {
        "type": "object",
        "properties": {
          "viewed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "dismissed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "dismissed_reason": {
            "type": "string",
            "nullable": true
          },
          "snoozed_until": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "action_taken": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightActionTakenDto"
          },
          "invalidated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "invalidation_reason": {
            "type": "string",
            "nullable": true
          },
          "allowed_actions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "regeneration_note": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightMetricsDto": {
        "type": "object",
        "properties": {
          "competitor_count": {
            "type": "integer",
            "format": "int32"
          },
          "consensus_count": {
            "type": "integer",
            "format": "int32"
          },
          "consensus_ratio": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "primary_gap_absolute": {
            "type": "number",
            "format": "double"
          },
          "primary_gap_percent": {
            "type": "number",
            "format": "double"
          },
          "primary_competitor_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightPriceObservationDto": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_name": {
            "type": "string",
            "nullable": true
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "product_details_id": {
            "type": "string",
            "nullable": true
          },
          "product_name": {
            "type": "string",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "original_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "original_currency": {
            "type": "string",
            "nullable": true
          },
          "observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "previous_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "previous_observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "price_difference_absolute": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "price_difference_percent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "is_undercut": {
            "type": "boolean",
            "nullable": true
          },
          "match_confidence": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightPriceObservationDto2": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_name": {
            "type": "string",
            "nullable": true
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "product_details_id": {
            "type": "string",
            "nullable": true
          },
          "product_name": {
            "type": "string",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "original_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "original_currency": {
            "type": "string",
            "nullable": true
          },
          "observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "previous_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "previous_observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "price_difference_absolute": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "price_difference_percent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "is_undercut": {
            "type": "boolean",
            "nullable": true
          },
          "match_confidence": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightProductDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "tracked_product_id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string"
          },
          "brand": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightRecommendationDto": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "suggested_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "suggested_price_basis": {
            "type": "string"
          },
          "suggested_price_competitor_id": {
            "type": "string",
            "nullable": true
          },
          "suggested_change_percent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "max_change_absolute": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "max_change_percent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "executes_price_change": {
            "type": "boolean"
          },
          "note": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightsSummaryFiltersDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "severity": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "competitor": {
            "type": "string",
            "nullable": true
          },
          "owner": {
            "type": "string",
            "nullable": true
          },
          "owner_products_matched": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "owner_is_access_control": {
            "type": "boolean"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightsSummaryResponse": {
        "type": "object",
        "properties": {
          "filters_applied": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightsSummaryFiltersDto"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.InsightSummaryDto"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PaginationMeta"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PublicApiError"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightStatusRequest": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "snooze_until": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "snooze_hours": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "action_taken": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightWhatChangedDto": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "facts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "change_from": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "change_to": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightWhyItMattersDto": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "impact_type": {
            "type": "string"
          },
          "range_low": {
            "type": "number",
            "format": "double"
          },
          "range_high": {
            "type": "number",
            "format": "double"
          },
          "range_unit": {
            "type": "string"
          },
          "assumptions": {
            "type": "string",
            "nullable": true
          },
          "is_estimate": {
            "type": "boolean"
          },
          "estimate_basis": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInvitationDto": {
        "type": "object",
        "properties": {
          "invitation_id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "invited_by": {
            "type": "string",
            "nullable": true
          },
          "invited_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_sent_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "email_delivery": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInvitationDto2": {
        "type": "object",
        "properties": {
          "invitation_id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "invited_by": {
            "type": "string",
            "nullable": true
          },
          "invited_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_sent_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "email_delivery": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailItemErrorDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailLastScanJobDto": {
        "type": "object",
        "properties": {
          "scan_id": {
            "type": "string"
          },
          "job_id": {
            "type": "string",
            "nullable": true
          },
          "scan_status": {
            "type": "string",
            "nullable": true
          },
          "job_status": {
            "type": "string",
            "nullable": true
          },
          "competitor_override_unresolved": {
            "type": "boolean"
          },
          "error_message": {
            "type": "string",
            "nullable": true
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailLedgerDto": {
        "type": "object",
        "properties": {
          "plan_found": {
            "type": "boolean"
          },
          "quota": {
            "type": "integer",
            "format": "int64"
          },
          "consumed": {
            "type": "integer",
            "format": "int64"
          },
          "reserved": {
            "type": "integer",
            "format": "int64"
          },
          "remaining": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "allow_overage": {
            "type": "boolean"
          },
          "billing_period_id": {
            "type": "string",
            "nullable": true
          },
          "period_start": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "period_end": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "source": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailAlertRuleDto": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAlertRuleDto"
            }
          },
          "next_cursor": {
            "type": "string",
            "nullable": true
          },
          "has_more": {
            "type": "boolean"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "total_count": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailListDtoOfRetailInsightDto": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInsightDto"
            }
          },
          "next_cursor": {
            "type": "string",
            "nullable": true
          },
          "has_more": {
            "type": "boolean"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "total_count": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarketBenchmarksDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "current_market_average": {
            "type": "number",
            "format": "float",
            "nullable": true
          },
          "rolling_13w_average": {
            "type": "number",
            "format": "float",
            "nullable": true
          },
          "rolling_52w_average": {
            "type": "number",
            "format": "float",
            "nullable": true
          },
          "weeks_observed_13": {
            "type": "integer",
            "format": "int32"
          },
          "weeks_observed_52": {
            "type": "integer",
            "format": "int32"
          },
          "competitor_retailer_count": {
            "type": "integer",
            "format": "int32"
          },
          "your_price": {
            "type": "number",
            "format": "float",
            "nullable": true
          },
          "your_vs_current_delta": {
            "type": "number",
            "format": "float",
            "nullable": true
          },
          "your_vs_13w_delta": {
            "type": "number",
            "format": "float",
            "nullable": true
          },
          "your_vs_52w_delta": {
            "type": "number",
            "format": "float",
            "nullable": true
          },
          "anchor_iso_week": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarketDto": {
        "type": "object",
        "properties": {
          "basket": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailBasketRowDto"
            }
          },
          "basket_trend": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailBasketTrendDto"
            },
            "nullable": true
          },
          "trend_scan_count": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "product_benchmarks": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarketBenchmarksDto"
          },
          "filters": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsFiltersDto"
          },
          "freshness": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailFreshnessDto"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsWarningDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarkNotificationsReadRequest": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "all": {
            "type": "boolean",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMarkNotificationsReadResultDto": {
        "type": "object",
        "properties": {
          "marked_read": {
            "type": "integer",
            "format": "int32"
          },
          "already_read_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "not_found_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "unread_count": {
            "type": "integer",
            "format": "int32"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchCorrectionRequest": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "op": {
            "type": "string",
            "nullable": true
          },
          "mapping_id": {
            "type": "string",
            "nullable": true
          },
          "matching_type": {
            "type": "string",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "exclusive": {
            "type": "boolean",
            "nullable": true
          },
          "set_user_excluded": {
            "type": "boolean",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchCorrectionResultDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "op": {
            "type": "string"
          },
          "competitor": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.MatchCorrections.CompetitorMatchesDto"
          },
          "effects": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchEffectsDto"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchEffectsDto": {
        "type": "object",
        "properties": {
          "future_scans": {
            "type": "string"
          },
          "analytics": {
            "type": "string"
          },
          "price_history": {
            "type": "string"
          },
          "insights": {
            "type": "string"
          },
          "billing": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchJobDto": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "scanned_product_id": {
            "type": "string",
            "nullable": true
          },
          "created_mapping_id": {
            "type": "string",
            "nullable": true
          },
          "error_message": {
            "type": "string",
            "nullable": true
          },
          "duration_seconds": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailNextActionDto": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          },
          "method": {
            "type": "string",
            "nullable": true
          },
          "path": {
            "type": "string",
            "nullable": true
          },
          "tool": {
            "type": "string",
            "nullable": true
          },
          "required_permission": {
            "type": "string",
            "nullable": true
          },
          "caller_has_permission": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailNotificationDto": {
        "type": "object",
        "properties": {
          "notification_id": {
            "type": "string"
          },
          "alert_rule_id": {
            "type": "string"
          },
          "alert_rule_name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "product_name": {
            "type": "string",
            "nullable": true
          },
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "competitor_name": {
            "type": "string",
            "nullable": true
          },
          "scan_id": {
            "type": "string",
            "nullable": true
          },
          "condition_type": {
            "type": "string",
            "nullable": true
          },
          "triggered_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "threshold_price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "previous_availability": {
            "type": "string",
            "nullable": true
          },
          "new_availability": {
            "type": "string",
            "nullable": true
          },
          "product_url": {
            "type": "string",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "read_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailNotificationListDto": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailNotificationDto"
            }
          },
          "next_cursor": {
            "type": "string",
            "nullable": true
          },
          "has_more": {
            "type": "boolean"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "total_count": {
            "type": "integer",
            "format": "int32"
          },
          "unread_count": {
            "type": "integer",
            "format": "int32"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailObservationDto": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string"
          },
          "competitor_name": {
            "type": "string",
            "nullable": true
          },
          "mapping_id": {
            "type": "string",
            "nullable": true
          },
          "matching_type": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixDto": {
        "type": "object",
        "properties": {
          "competitors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixRowDto"
            }
          },
          "trend": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixTrendDto"
            },
            "nullable": true
          },
          "trend_scan_count": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "filters": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsFiltersDto"
          },
          "freshness": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailFreshnessDto"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsWarningDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixRowDto": {
        "type": "object",
        "properties": {
          "competitor": {
            "type": "string"
          },
          "your_price_higher_count": {
            "type": "integer",
            "format": "int32"
          },
          "your_price_lower_count": {
            "type": "integer",
            "format": "int32"
          },
          "equal_count": {
            "type": "integer",
            "format": "int32"
          },
          "compared_products": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixTrendDto": {
        "type": "object",
        "properties": {
          "competitor": {
            "type": "string"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixTrendPointDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceMatrixTrendPointDto": {
        "type": "object",
        "properties": {
          "scan_date": {
            "type": "string",
            "format": "date-time"
          },
          "your_price_higher_count": {
            "type": "integer",
            "format": "int32"
          },
          "your_price_lower_count": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceTableCompetitorPriceDto": {
        "type": "object",
        "properties": {
          "competitor": {
            "type": "string"
          },
          "domain": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "type": "string"
          },
          "difference_percent": {
            "type": "number",
            "format": "double"
          },
          "match_type": {
            "type": "string"
          },
          "is_out_of_stock": {
            "type": "boolean"
          },
          "is_on_promotion": {
            "type": "boolean"
          },
          "is_marketplace": {
            "type": "boolean"
          },
          "url": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceTableDto": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceTableRowDto"
            }
          },
          "next_cursor": {
            "type": "string",
            "nullable": true
          },
          "has_more": {
            "type": "boolean"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "total_count": {
            "type": "integer",
            "format": "int32"
          },
          "filters": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsFiltersDto"
          },
          "freshness": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailFreshnessDto"
          },
          "page_coverage": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCoverageDto"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailAnalyticsWarningDto"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceTableRowDto": {
        "type": "object",
        "properties": {
          "tracked_product_id": {
            "type": "string",
            "nullable": true
          },
          "product_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "sku": {
            "type": "string",
            "nullable": true
          },
          "brand": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "department": {
            "type": "string",
            "nullable": true
          },
          "owner": {
            "type": "string",
            "nullable": true
          },
          "your_price": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "type": "string"
          },
          "your_price_observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "your_price_is_stale": {
            "type": "boolean"
          },
          "competitor_prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailPriceTableCompetitorPriceDto"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductApplyResultDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          },
          "applied_count": {
            "type": "integer",
            "format": "int32"
          },
          "failed_count": {
            "type": "integer",
            "format": "int32"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductItemResultDto"
            }
          },
          "capacity": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCapacityDto"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductChangeRequest": {
        "type": "object",
        "properties": {
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductOperationDto"
            },
            "nullable": true
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductDetailDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "sku": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "brand": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "owner": {
            "type": "string",
            "nullable": true
          },
          "tracking_status": {
            "type": "string"
          },
          "validation_status": {
            "type": "string",
            "nullable": true
          },
          "scan_schedule": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductScheduleDto"
          },
          "competitor_mode": {
            "type": "string"
          },
          "competitor_mode_source": {
            "type": "string",
            "nullable": true
          },
          "explicit_competitor_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "effective_competitors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCompetitorRefDto"
            }
          },
          "unresolved_competitors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUnresolvedCompetitorDto"
            }
          },
          "config_error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailConfigIssueDto"
          },
          "config_warning": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailConfigIssueDto"
          },
          "scanned": {
            "type": "boolean"
          },
          "scan_skip_reason": {
            "type": "string",
            "nullable": true
          },
          "latest_observations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailObservationDto"
            }
          },
          "last_scan_job": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailLastScanJobDto"
          },
          "time_added": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "time_last_modified": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "etag": {
            "type": "string",
            "nullable": true
          },
          "freshness": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductFreshnessDto"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductFreshnessDto": {
        "type": "object",
        "properties": {
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_observed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "last_scan_id": {
            "type": "string",
            "nullable": true
          },
          "last_scan_completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductItemResultDto": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "format": "int32"
          },
          "op": {
            "type": "string"
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailItemErrorDto"
          },
          "effects": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductMatchesDto": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "matches": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.MatchCorrections.ProductMatchesDto"
          },
          "effects": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchEffectsDto"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductOperationDto": {
        "type": "object",
        "properties": {
          "op": {
            "type": "string",
            "nullable": true
          },
          "product_id": {
            "type": "string",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "sku": {
            "type": "string",
            "nullable": true
          },
          "brand": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "scan_schedule_id": {
            "type": "string",
            "nullable": true
          },
          "owner": {
            "type": "string",
            "nullable": true
          },
          "competitor_mode": {
            "type": "string",
            "nullable": true
          },
          "competitor_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailProductScheduleDto": {
        "type": "object",
        "properties": {
          "schedule_id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "is_default": {
            "type": "boolean"
          },
          "enabled": {
            "type": "boolean"
          },
          "assigned_schedule_id": {
            "type": "string",
            "nullable": true
          },
          "membership_note": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailRemoveMemberRequest": {
        "type": "object",
        "properties": {
          "preview_id": {
            "type": "string",
            "nullable": true
          }
        },
        "default": null,
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailReservationBoundDto": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string"
          },
          "units": {
            "type": "integer",
            "format": "int64"
          },
          "products": {
            "type": "integer",
            "format": "int32"
          },
          "competitor_pairs": {
            "type": "integer",
            "format": "int64"
          },
          "listings_per_competitor_cap": {
            "type": "integer",
            "format": "int32"
          },
          "method": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanAccountingDto": {
        "type": "object",
        "properties": {
          "origin": {
            "type": "string"
          },
          "billable": {
            "type": "boolean"
          },
          "exemption_reason": {
            "type": "string",
            "nullable": true
          },
          "policy": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanDetailDto": {
        "type": "object",
        "properties": {
          "scan_id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "partial": {
            "type": "boolean"
          },
          "scan_type": {
            "type": "string",
            "nullable": true
          },
          "accounting": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanAccountingDto"
          },
          "product_count": {
            "type": "integer",
            "format": "int32"
          },
          "job_counts": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanJobCountsDto"
          },
          "competitor_override_unresolved_jobs": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "duration_seconds": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "failure_reason": {
            "type": "string",
            "nullable": true
          },
          "error_message": {
            "type": "string",
            "nullable": true
          },
          "reservation": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanReservationDto"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanJobCountsDto": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "format": "int32"
          },
          "succeeded": {
            "type": "integer",
            "format": "int32"
          },
          "failed": {
            "type": "integer",
            "format": "int32"
          },
          "blocked": {
            "type": "integer",
            "format": "int32"
          },
          "pending": {
            "type": "integer",
            "format": "int32"
          },
          "in_progress": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanRequest": {
        "type": "object",
        "properties": {
          "scope": {
            "type": "string",
            "nullable": true
          },
          "product_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanReservationDto": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string"
          },
          "operation_id": {
            "type": "string",
            "nullable": true
          },
          "billing_period_id": {
            "type": "string",
            "nullable": true
          },
          "bound_units": {
            "type": "integer",
            "format": "int64"
          },
          "reserved_units": {
            "type": "integer",
            "format": "int64"
          },
          "consumed_units": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "released_units": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "overrun_units": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "overage_units": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "denial_reason": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanStartedDto": {
        "type": "object",
        "properties": {
          "scan_id": {
            "type": "string"
          },
          "operation_id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "accounting": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScanAccountingDto"
          },
          "product_count": {
            "type": "integer",
            "format": "int32"
          },
          "reservation_upper_bound": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailReservationBoundDto"
          },
          "queued_at": {
            "type": "string",
            "format": "date-time"
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          },
          "status_path": {
            "type": "string"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleApplyResultDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          },
          "applied_count": {
            "type": "integer",
            "format": "int32"
          },
          "failed_count": {
            "type": "integer",
            "format": "int32"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleItemResultDto"
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleChangeRequest": {
        "type": "object",
        "properties": {
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleOperationDto"
            },
            "nullable": true
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduledRunDto": {
        "type": "object",
        "properties": {
          "run_at_utc": {
            "type": "string",
            "format": "date-time"
          },
          "run_at_local": {
            "type": "string"
          },
          "utc_offset": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleDto": {
        "type": "object",
        "properties": {
          "schedule_id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "is_default": {
            "type": "boolean"
          },
          "is_synthesized": {
            "type": "boolean"
          },
          "enabled": {
            "type": "boolean"
          },
          "frequency": {
            "type": "string",
            "nullable": true
          },
          "timezone": {
            "type": "string",
            "nullable": true
          },
          "timezone_iana": {
            "type": "string",
            "nullable": true
          },
          "start_date_utc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "custom_schedule": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCustomScheduleDto"
          },
          "last_run_utc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "next_runs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduledRunDto"
            }
          },
          "member_product_count": {
            "type": "integer",
            "format": "int32"
          },
          "blocked_product_count": {
            "type": "integer",
            "format": "int32"
          },
          "schedule_error": {
            "type": "string",
            "nullable": true
          },
          "estimated": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleEstimateDto"
          },
          "etag": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleEstimateDto": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string"
          },
          "data_points_per_run": {
            "type": "number",
            "format": "double"
          },
          "runs_in_period": {
            "type": "integer",
            "format": "int32"
          },
          "data_points_in_period": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleItemResultDto": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "format": "int32"
          },
          "op": {
            "type": "string"
          },
          "schedule_id": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailItemErrorDto"
          },
          "frequency": {
            "type": "string",
            "nullable": true
          },
          "timezone": {
            "type": "string",
            "nullable": true
          },
          "next_runs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduledRunDto"
            }
          },
          "dst_notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "membership_changes": {
            "type": "integer",
            "format": "int32"
          },
          "effects": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleListDto": {
        "type": "object",
        "properties": {
          "period": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Estimation.EstimateWindowDto"
          },
          "ledger": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailLedgerDto"
          },
          "estimated_period_total": {
            "type": "integer",
            "format": "int64"
          },
          "assumptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.Estimation.EstimateAssumptionDto"
            }
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleDto"
            }
          },
          "next_cursor": {
            "type": "string",
            "nullable": true
          },
          "has_more": {
            "type": "boolean"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "total_count": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailScheduleOperationDto": {
        "type": "object",
        "properties": {
          "op": {
            "type": "string",
            "nullable": true
          },
          "schedule_id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "frequency": {
            "type": "string",
            "nullable": true
          },
          "timezone": {
            "type": "string",
            "nullable": true
          },
          "start_date_utc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "custom_schedule": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailCustomScheduleDto"
          },
          "enabled": {
            "type": "boolean",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailSeatUsageDto": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "used_by_members": {
            "type": "integer",
            "format": "int32"
          },
          "reserved_by_invitations": {
            "type": "integer",
            "format": "int32"
          },
          "available": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailSetupItemDto": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "details": {
            "type": "object"
          },
          "next_action": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailNextActionDto"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailSetupStatusDto": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "ready": {
            "type": "boolean"
          },
          "completed_count": {
            "type": "integer",
            "format": "int32"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailSetupItemDto"
            }
          },
          "paid_workspace_note": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailTeamDto": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "members": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailTeamMemberDto"
            }
          },
          "invitations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailInvitationDto"
            },
            "nullable": true
          },
          "pending_invitation_count": {
            "type": "integer",
            "format": "int32"
          },
          "seats": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailSeatUsageDto"
          },
          "grantable_roles": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailTeamMemberDto": {
        "type": "object",
        "properties": {
          "user_id": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string"
          },
          "joined_at": {
            "type": "string",
            "format": "date-time"
          },
          "is_you": {
            "type": "boolean"
          },
          "is_admin": {
            "type": "boolean"
          },
          "counts_toward_seats": {
            "type": "boolean"
          },
          "etag": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailTeamMemberDto2": {
        "type": "object",
        "properties": {
          "user_id": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string"
          },
          "joined_at": {
            "type": "string",
            "format": "date-time"
          },
          "is_you": {
            "type": "boolean"
          },
          "is_admin": {
            "type": "boolean"
          },
          "counts_toward_seats": {
            "type": "boolean"
          },
          "etag": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUnresolvedCompetitorDto": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUpdateMemberRequest": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionRequest": {
        "type": "object",
        "properties": {
          "competitor_id": {
            "type": "string",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "matching_type": {
            "type": "string",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.Retail.RetailUrlCorrectionStartedDto": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "product_id": {
            "type": "string"
          },
          "competitor_id": {
            "type": "string"
          },
          "preview_id": {
            "type": "string",
            "nullable": true
          },
          "status_path": {
            "type": "string"
          },
          "effects": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.Retail.RetailMatchEffectsDto"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.ScanReportCsvDto": {
        "type": "object",
        "properties": {
          "scanId": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "contentType": {
            "type": "string"
          },
          "productCount": {
            "type": "integer",
            "format": "int32"
          },
          "competitorCount": {
            "type": "integer",
            "format": "int32"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "csv": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.ScanResultDto": {
        "type": "object",
        "properties": {
          "scanId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "scanType": {
            "type": "string"
          },
          "totalJobs": {
            "type": "integer",
            "format": "int32"
          },
          "completedJobs": {
            "type": "integer",
            "format": "int32"
          },
          "successJobs": {
            "type": "integer",
            "format": "int32"
          },
          "failedJobs": {
            "type": "integer",
            "format": "int32"
          },
          "productCount": {
            "type": "integer",
            "format": "int32"
          },
          "startTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "endTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.UsageCreditsDto": {
        "type": "object",
        "properties": {
          "balanceDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "lifetimePurchasedDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "lifetimeGrantedDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "lifetimeConsumedDataPoints": {
            "type": "integer",
            "format": "int64"
          },
          "totalAvailableDataPoints": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.UsageRateLimitDto": {
        "type": "object",
        "properties": {
          "limitPerMinute": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.UsageUpgradeDto": {
        "type": "object",
        "properties": {
          "recommendedTier": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Models.DTOs.PublicApi.WorkspacePriceHistoryFreshnessDto": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastObservedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "latestObservedAtByCompetitor": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "format": "date-time"
            }
          },
          "observationCount": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "WebAPIServer.Models.DTOs.PublicApi.WorkspacePriceHistorySeriesDto": {
        "type": "object",
        "properties": {
          "trackedProductId": {
            "type": "string"
          },
          "sku": {
            "type": "string",
            "nullable": true
          },
          "trackingStatus": {
            "type": "string"
          },
          "freshness": {
            "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.WorkspacePriceHistoryFreshnessDto"
          },
          "yourPriceSeries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebAPIServer.Models.DTOs.PublicApi.PriceSeriesPointDto"
            }
          },
          "competitorNames": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "unmatchedCompetitorIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "productId": {
            "type": "string"
          },
          "productName": {
            "type": "string"
          },
          "granularity": {
            "type": "string"
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          },
          "currency": {
            "type": "string"
          },
          "byCompetitor": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": { }
            }
          },
          "tierCapApplied": {
            "type": "boolean"
          },
          "effectiveTierCapDays": {
            "type": "integer",
            "format": "int32"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Services.RetailWorkspace.V1.RetailReportPreferencesDto": {
        "type": "object",
        "properties": {
          "scan_report_email": {
            "type": "boolean"
          },
          "alert_email_preference": {
            "type": "boolean"
          },
          "scope": {
            "type": "string"
          },
          "note": {
            "type": "string"
          }
        },
        "nullable": true
      },
      "WebAPIServer.Services.RetailWorkspace.V1.RetailReportPreferencesRequest": {
        "type": "object",
        "properties": {
          "scan_report_email": {
            "type": "boolean",
            "nullable": true
          }
        },
        "nullable": true
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "API key issued from the Nesika account dashboard. Send it in the X-API-Key request header.",
        "name": "X-API-Key",
        "in": "header"
      },
      "Bearer": {
        "type": "http",
        "description": "Azure AD (Entra) access token used by the Nesika web application. Send it as 'Authorization: Bearer <token>'.",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "tags": [
    {
      "name": "Product Matching",
      "description": "Search the catalog and resolve products so you can look up pricing by product. Start here when you have a name/identifier but not a Nesika product id."
    },
    {
      "name": "Price Monitoring",
      "description": "Read current and historical competitor prices. Use price-history/series/trends for time-series charting and backtesting; use the current-prices endpoint for a live snapshot."
    },
    {
      "name": "Pricing Actions",
      "description": "Run pricing computations such as landed-cost analysis to support pricing decisions."
    },
    {
      "name": "Competitor Intelligence",
      "description": "Browse the competitor/vendor catalog you are tracking."
    },
    {
      "name": "Market Insights",
      "description": "Aggregate market-level pricing signals across competitors."
    },
    {
      "name": "Commerce",
      "description": "Deterministic, provider-neutral product search and offer lookup (search-products, resolve-product, find-offers, deep-search). Matching is exact-identifier based with no generative/LLM reasoning; each operation runs under a documented, bounded work budget and is billed a fixed number of data points per call, with idempotent replays free of charge."
    },
    {
      "name": "Account & Usage Data",
      "description": "Access data scoped to your own account: your tracked products, scans, price changes, and insight summaries."
    },
    {
      "name": "DeveloperAccounts",
      "description": "Self-serve developer signup for the Public Engine. Does NOT require an existing customer\nworkspace or membership. Identity is verified via the configured\n`IDeveloperIdentityVerifier` (built-in email OTP by default, Entra External ID\nwhen configured at deployment time)."
    },
    {
      "name": "DeveloperApiKeys",
      "description": "Self-serve management of developer engine-scope keys. Requires a developer JWT (Entra\nExternal ID); API key auth is intentionally NOT accepted here (an engine key cannot mint or\nmanage keys). Keys are bound to the developer's hidden workspace and never require a customer\nworkspace or membership."
    },
    {
      "name": "DeveloperCredits",
      "description": "Self-serve prepaid credit packs for the Public Engine developer API.\n\nNew developer account registration makes one attempt to grant 1,000 signup credits to the prepaid\ncredit ledger. The signup grant does not renew monthly and is not automatically retried or backfilled;\nfailed grants require manual remediation. Existing developer accounts are unchanged. Purchased credits\nare one-time purchases that never expire and fund usage after any applicable plan quota is exhausted.\nRequires a developer JWT (Entra External ID) exactly like `DeveloperApiKeysController`;\nan engine API key can never buy credits.\n\nThis controller is intentionally thin: every decision (catalog, redirect-url allow-listing, Stripe\nsession creation, ledger movement) lives in `IPublicEngineCreditService`."
    },
    {
      "name": "Credential Identity",
      "description": "Authoritative identity introspection for MCP API-key credentials and MCP OAuth (exchanged-token)\ncredentials."
    },
    {
      "name": "Retail Workspace: Alerts",
      "description": "Retail V1 alert rules and notifications (PR12a). Only the caller's OWN rules and notifications\nare visible or editable; the recipient is always the caller (an API key acts as its creator)."
    },
    {
      "name": "Retail Workspace: Analytics",
      "description": "Retail V1 analytics for the caller's workspace (PR12a): competitor detail, price table, price\nmatrix and market analysis. Read only; reuses the web app's Overview, Competitor Detail and Market\nBenchmark computations (no new analytics math) and adds freshness and coverage."
    },
    {
      "name": "Retail Workspace: Monitoring",
      "description": "Retail V1 workspace competitors (PR11a): list with usage and limits, preview / apply add, update and\nremove. Per-product competitor lists are changed with products apply (`set_competitors`)."
    },
    {
      "name": "Retail Workspace: Insights",
      "description": "Retail V1 insights for the caller's workspace (PR12a): list, detail with evidence and the card\nlifecycle (dismiss, snooze, record action, reopen). Accepts a workspace API key or an\ninteractive bearer token (`RetailResourceAccess`), unlike the JWT-only internal\n`/api/insights` routes. No endpoint here changes a selling price."
    },
    {
      "name": "Retail Workspace: Report preferences",
      "description": "Retail V1 report preference of the caller (PR12a). Only the caller's own scan-report email\npreference; it is global across the caller's workspaces (existing user-profile behaviour)."
    },
    {
      "name": "Retail Workspace: Team",
      "description": "Retail V1 team administration (PR12a, decision D6): read the team, invite (never a direct add),\ncancel / resend invitations, change a member's role, remove a member (preview required).\nInvitation responses NEVER contain the redemption token."
    },
    {
      "name": "V1Usage",
      "description": "WS1-PR2 usage introspection for Public Engine keys. `GET /api/v1/me/usage` is the only\n`/api/v1/me/*` route an engine key may call (allowed explicitly by the WS1-PR1 route guard);\nall other `/api/v1/me/*` customer-data routes stay customer/workspace scoped. This endpoint\nis control-plane and zero-unit: the metering middleware classifies it as non-billable so reading\nusage never consumes quota and never writes an `EngineUsageTrace`."
    }
  ]
}