openapi: 3.0.3
info:
  title: MallPlus Open Platform API
  version: 1.0.0
  description: Open API for Philippine mall brand integrations. Partners integrate with catalog, orders, inventory, and fulfillment APIs via HMAC-SHA256 authentication with optional seller-scoped OAuth2.
  contact:
    name: MallPlus Developer Support
    email: support@mallplus.ph
servers:
  - url: https://open.mallplus.ph
    description: Production
  - url: https://sandbox.open.mallplus.ph
    description: Sandbox
security:
  - hmacAuth: []
tags:
  - name: Auth
    description: OAuth2 seller authorization flow
  - name: Credentials
    description: Partner credential management (secret rotation)
  - name: Products
    description: Product catalog management
  - name: Categories
    description: Product categories
  - name: Attributes
    description: Product attribute definitions
  - name: Orders
    description: Order management and fulfillment
  - name: Inventory
    description: Inventory level management
  - name: Fulfillments
    description: Fulfillment tracking
  - name: Sellers
    description: Seller information
  - name: Returns
    description: Return request management
  - name: Shipping
    description: Shipping options
paths:
  /open/v1/auth/authorize:
    get:
      summary: Redirect seller to consent page (HMAC-signed URL)
      tags:
        - Auth
      responses:
        "302":
          description: Redirect to the seller consent page
          headers:
            Location:
              schema:
                type: string
                format: uri
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: client_id
          in: query
          required: true
          schema:
            type: string
          description: Partner application client ID.
        - name: redirect_uri
          in: query
          required: true
          schema:
            type: string
            format: uri
          description: Registered redirect URI that receives the authorization response.
        - name: state
          in: query
          required: false
          schema:
            type: string
            maxLength: 1024
          description: Optional opaque partner-generated value for CSRF binding. Echoed unchanged on the authorization or error redirect when supplied.
  /open/v1/auth/token:
    post:
      summary: Exchange authorization code for access + refresh tokens
      tags:
        - Auth
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TokenResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TokenRequest"
  /open/v1/auth/token/refresh:
    post:
      summary: Refresh an expired access token
      tags:
        - Auth
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RefreshTokenResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RefreshTokenRequest"
  /open/v1/auth/revoke:
    post:
      summary: Revoke a seller authorization
      tags:
        - Auth
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RevokeAuthorizationResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RevokeAuthorizationRequest"
  /open/v1/auth/seller-verify:
    post:
      summary: Verify seller credentials and request an OTP
      tags:
        - Auth
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SellerVerifyResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SellerVerifyRequest"
  /open/v1/auth/seller-verify-otp:
    post:
      summary: Verify seller OTP for an authorization session
      tags:
        - Auth
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SellerVerifyOtpResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - sellerAuthSession: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SellerVerifyOtpRequest"
  /open/v1/auth/seller-consent:
    post:
      summary: Create an authorization code after seller consent
      tags:
        - Auth
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SellerConsentResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - sellerAuthSession: []
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EmptyObject"
  /open/v1/auth/deny:
    post:
      summary: Validate and return the registered redirect URL after seller denial
      tags:
        - Auth
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DenyAuthorizationResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DenyAuthorizationRequest"
  /open/v1/credentials/rotate-secret:
    post:
      summary: Rotate sandbox client secret (old secret invalidated immediately)
      tags:
        - Credentials
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CredentialRotationResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
  /open/v1/credentials/rotate-live-secret:
    post:
      summary: "Rotate production client secret (requires app status: live)"
      tags:
        - Credentials
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LiveCredentialRotationResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
  /open/v1/webhooks:
    get:
      summary: List webhook subscriptions for the authenticated app
      tags:
        - Webhooks
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebhookListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
    post:
      summary: Create a webhook subscription
      tags:
        - Webhooks
      responses:
        "201":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebhookResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebhookCreateRequest"
  /open/v1/webhooks/{id}:
    get:
      summary: Get a webhook subscription
      tags:
        - Webhooks
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebhookResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The webhook subscription ID.
    put:
      summary: Update a webhook subscription
      tags:
        - Webhooks
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebhookResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The webhook subscription ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebhookUpdateRequest"
    delete:
      summary: Delete a webhook subscription
      tags:
        - Webhooks
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebhookDeleteResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The webhook subscription ID.
  /open/v1/webhooks/test:
    post:
      summary: Send a synthetic event to an active webhook subscription
      tags:
        - Webhooks
      responses:
        "202":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebhookTestResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebhookTestRequest"
  /open/v1/usage:
    get:
      summary: Get the authenticated app's API call statistics; pass granularity=daily|hourly for a time-series (daily 90d, hourly 7d, UTC buckets)
      tags:
        - Usage
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UsageResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: from
          in: query
          schema:
            type: string
            format: date-time
          description: Start of the filter window as an ISO-8601 timestamp.
        - name: to
          in: query
          schema:
            type: string
            format: date-time
          description: End of the filter window as an ISO-8601 timestamp.
        - name: endpoint
          in: query
          schema:
            type: string
          description: Endpoint path or route pattern to filter usage and access-log rows.
        - name: granularity
          in: query
          schema:
            type: string
            enum:
              - daily
              - hourly
          description: Time-series bucket size for usage metrics.
  /open/v1/logs:
    get:
      summary: List the authenticated app's access logs with endpoint, status code, and ISO timestamp-range filters
      tags:
        - Logs
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AccessLogListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: endpoint
          in: query
          schema:
            type: string
          description: Endpoint path or route pattern to filter usage and access-log rows.
        - name: status_code
          in: query
          schema:
            type: integer
          description: HTTP status code used to filter access-log rows.
        - name: from
          in: query
          schema:
            type: string
            format: date-time
          description: Start of the filter window as an ISO-8601 timestamp.
        - name: to
          in: query
          schema:
            type: string
            format: date-time
          description: End of the filter window as an ISO-8601 timestamp.
  /open/v1/authorizations:
    get:
      summary: List the seller authorizations granted to the calling app (seller_id, scopes, granted_at, expires_at). Defaults to status=active; pass status=all|revoked|expired for the full history. This is the partner-facing source of the seller_id values used by seller-token calls and POST /auth/revoke.
      tags:
        - Authorizations
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthorizationListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: status
          in: query
          schema:
            type: string
            enum:
              - active
              - revoked
              - expired
              - all
            default: active
          description: Resource status to include in the list.
  /open/v1/sandbox/sellers:
    get:
      summary: List test sellers for the authenticated sandbox app
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SandboxSellerListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
    post:
      summary: Create a test seller in the sandbox
      tags:
        - Sandbox
      responses:
        "201":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SandboxSellerResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SandboxSellerCreateRequest"
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/sandbox/buyers:
    get:
      summary: List test buyers for the authenticated sandbox app
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SandboxBuyerListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
    post:
      summary: Create a test buyer (with shipping address) in the sandbox
      tags:
        - Sandbox
      responses:
        "201":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SandboxBuyerResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SandboxBuyerCreateRequest"
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/sandbox/orders:
    get:
      summary: List test orders for the authenticated sandbox app
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
    post:
      summary: "Place a buyer-driven test order (state: PENDING)"
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SandboxOrderRequest"
  /open/v1/sandbox/orders/{id}:
    get:
      summary: Get a sandbox test order by ID
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The sandbox order ID.
  /open/v1/sandbox/orders/{id}/tracking:
    get:
      summary: Get a sandbox test order's handover/tracking status after a mock booking or shipment.
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderTrackingResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The sandbox order ID.
  /open/v1/sandbox/orders/{id}/pay-mock:
    post:
      summary: Mock-pay a test order — chained transition PENDING → READY_TO_SHIP
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The sandbox order ID.
  /open/v1/sandbox/orders/{id}/process-mock:
    post:
      summary: Mock-process a test order — READY_TO_SHIP → PROCESSED, with a sandbox tracking number.
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The sandbox order ID.
  /open/v1/sandbox/orders/{id}/ship-mock:
    post:
      summary: Mock-ship a test order — READY_TO_SHIP → SHIPPED
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The sandbox order ID.
  /open/v1/sandbox/orders/{id}/deliver-mock:
    post:
      summary: Mock-deliver a test order (buyer-side) — SHIPPED → DELIVERED
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The sandbox order ID.
  /open/v1/sandbox/seed:
    post:
      summary: Re-seed default sandbox fixtures (1 seller, 1 buyer, 7 products). Idempotent — does not delete existing data.
      tags:
        - Sandbox
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SandboxSeedResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SandboxSeedRequest"
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/jobs/{jobId}:
    get:
      summary: Poll a tenant-scoped asynchronous bulk job. Required operation scope is derived from the persisted operation.
      tags:
        - Jobs
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkJobResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      x-requires-seller-token: true
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
          description: The asynchronous bulk job ID returned when the bulk operation was accepted.
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
            minimum: 0
          description: 0-based item offset for this asynchronous job result page.
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
  /open/v1/jobs/{jobId}/cancel:
    post:
      summary: Cancel a pending or processing asynchronous bulk job. Returns 409 CONFLICT when the job is already terminal. Required operation scope is derived from the persisted operation.
      tags:
        - Jobs
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkJobResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      x-requires-seller-token: true
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
          description: The asynchronous bulk job ID returned when the bulk operation was accepted.
  /open/v1/products:
    get:
      summary: List products with pagination
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Product listing is available with limited support for deep cursor traversal.
      x-availability: limited
      x-workaround: Use returned pages as-is; contact MallPlus before relying on deep cursor traversal for high-volume sync.
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:read
      x-scope: catalog:read
      x-requires-seller-token: true
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: page_size
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
          description: Requested page size. When omitted, the endpoint uses the standard limit value.
        - name: q
          in: query
          schema:
            type: string
          description: Search text used to filter products by partner-visible product fields.
        - name: status
          in: query
          schema:
            type: string
            enum:
              - live
              - unlisted
              - delisted
              - proposed
              - under_review
              - archived
              - published
              - draft
          description: "Product status to include in the list. Accepts every status a product can be observed in — settable by the partner: live, unlisted, delisted; read-only, set by the platform: proposed, under_review, archived. Deprecated aliases accepted for compatibility: published (= live), draft (= unlisted)."
        - name: category
          in: query
          schema:
            type: string
          description: Product category ID or category slug used to filter products.
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - created_at_asc
              - created_at_desc
              - price_asc
              - price_desc
          description: Product sort order. Supported values sort by creation time or price.
        - name: cursor
          in: query
          schema:
            type: string
          description: Pagination cursor returned by a previous response page.
    post:
      summary: Create a new product
      tags:
        - Products
      responses:
        "201":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:write
      x-scope: catalog:write
      x-requires-seller-token: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductCreateRequest"
  /open/v1/products/{id}:
    get:
      summary: Get a single product by ID
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:read
      x-scope: catalog:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
    put:
      summary: Update an existing product. When `images` is supplied it replaces the full image set, so send the complete list.
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:write
      x-scope: catalog:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductUpdateRequest"
    delete:
      summary: Delete a product
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductDeleteResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:write
      x-scope: catalog:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
  /open/v1/products/{id}/variant-prices:
    get:
      summary: List per-variant prices (original + sale) for external price mapping
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VariantPriceListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Variant price lookup is available with limited seller-ownership confirmation.
      x-availability: limited
      x-workaround: Confirm seller ownership in Seller Center before updating prices.
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:read
      x-scope: catalog:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
  /open/v1/categories:
    get:
      summary: List product categories
      tags:
        - Categories
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CategoryListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      x-scope: catalog:read
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: cursor
          in: query
          schema:
            type: string
          description: Pagination cursor returned by a previous response page.
  /open/v1/categories/{id}/attributes:
    get:
      summary: List attribute definitions for a product category
      tags:
        - Categories
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CategoryAttributeListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      x-scope: catalog:read
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product category ID.
  /open/v1/attributes:
    get:
      summary: List all product attribute definitions (attribute_id, name, type)
      tags:
        - Attributes
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AttributeListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      x-scope: catalog:read
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
  /open/v1/products/bulk:
    post:
      summary: Bulk create/update products
      tags:
        - Products
      responses:
        "201":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductBulkCreateResponse"
        "202":
          description: Asynchronous job accepted
          headers:
            Location:
              schema:
                type: string
            Retry-After:
              schema:
                type: integer
                example: 5
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkJobAcceptedResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:write
      x-scope: catalog:write
      x-requires-seller-token: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductBulkRequest"
  /open/v1/products/{id}/price:
    put:
      summary: Atomically update prices for one or more variants of a seller-owned product
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VariantPriceUpdateResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:write
      x-scope: catalog:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductPriceUpdateRequest"
  /open/v1/products/{id}/status:
    post:
      summary: Set a product status (live, unlisted, delisted) — the read-only statuses are rejected with 400
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductStatusUpdateResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - catalog:write
      x-scope: catalog:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductStatusUpdateRequest"
  /open/v1/products/{id}/stock:
    put:
      summary: Set absolute on-hand stock per variant for a product
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VariantStockUpdateResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - inventory:write
      x-scope: inventory:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductStockUpdateRequest"
  /open/v1/products/{id}/variants:
    get:
      summary: Get a product’s variants with on-hand stock per variant
      tags:
        - Products
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductVariantListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - inventory:read
      x-scope: inventory:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The product ID.
  /open/v1/orders:
    get:
      summary: List orders with pagination
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Order listing is available with limited filtering and sorting support.
      x-availability: limited
      x-workaround: Use unfiltered order export for now, then filter in your system.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: status
          in: query
          schema:
            type: string
            enum:
              - READY_TO_SHIP
              - SHIPPED
              - DELIVERED
              - CANCELLED
              - RETURN_REFUND
          description: Order status to include in the list.
        - name: created_after
          in: query
          schema:
            type: string
            format: date-time
          description: Return records created at or after this ISO-8601 timestamp.
        - name: created_before
          in: query
          schema:
            type: string
            format: date-time
          description: Return records created before this ISO-8601 timestamp.
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - created_at_asc
              - created_at_desc
          description: Order sort order. Supported values sort by creation time.
        - name: cursor
          in: query
          schema:
            type: string
          description: Pagination cursor returned by a previous response page.
  /open/v1/orders/{id}:
    get:
      summary: Get a single order by ID
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
  /open/v1/orders/{id}/items:
    get:
      summary: Get line items for an order
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderItemListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
  /open/v1/orders/{id}/shipment/eligible-dates:
    get:
      summary: "Get eligible pickup dates for an order (platform rules: Ship-By-Date cap + holiday calendar). Returns 422 once the order has shipped."
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EligiblePickupDatesResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
  /open/v1/orders/{id}/shipment/pickup-slots:
    get:
      summary: Get pickup slot availability for a single date on an order (?date=YYYY-MM-DD). Rule-based (cutoff/holiday/working-days, Asia/Manila); a date with no slot returns available:false, not an error.
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PickupSlotResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
        - name: date
          in: query
          required: true
          schema:
            type: string
            format: date
          description: Pickup date to validate as an ISO calendar date in YYYY-MM-DD format.
  /open/v1/orders/{id}/shipment:
    post:
      summary: Arrange a shipment for an order. Body type:pickup requires pickupAddressId + pickupDate (YYYY-MM-DD); type:dropoff requires neither. Returns the carrier tracking number. 422 SHIPMENT_ALREADY_ARRANGED if the order already has a booking; 422 INVALID_PICKUP_DATE for a rule-rejected date; 422 PICKUP_DATES_UNAVAILABLE once shipped.
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShipmentArrangementResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Arrange a carrier pickup or dropoff shipment for an order owned by the authenticated seller. An Idempotency-Key is required.
      x-availability: limited
      x-workaround: Arrange shipment in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ShipmentArrangementRequest"
  /open/v1/orders/{id}/tracking:
    get:
      summary: "Get the current tracking info for an order's shipment: carrier tracking number, current status, and the latest tracking event (timestamp + location) received from the carrier. Returns 422 SHIPMENT_NOT_ARRANGED when the shipment has not yet been arranged."
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderTrackingResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
  /open/v1/orders/{id}/shipping-label:
    get:
      summary: Get the print-ready AWB / shipping label for an order's shipment. The label is only available after shipment has been successfully arranged; format is pdf_base64 (default), url, or html. Returns 422 SHIPPING_LABEL_UNAVAILABLE when the shipment has not yet been arranged; 404 when the order is missing or belongs to another shop.
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShippingLabelResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
        - name: format
          in: query
          schema:
            type: string
            enum:
              - pdf_base64
              - url
              - html
          description: Shipping-label format to return.
  /open/v1/orders/{id}/ship:
    post:
      summary: Ship an order with tracking information
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Single-order shipping is available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: Arrange and ship in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrderShipRequest"
  /open/v1/orders/{id}/cancel:
    post:
      summary: Cancel an order
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The order ID.
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/orders/bulk-ship:
    post:
      summary: Ship multiple orders in a single request (max 50)
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkOrderShipResponse"
        "202":
          description: Asynchronous job accepted
          headers:
            Location:
              schema:
                type: string
            Retry-After:
              schema:
                type: integer
                example: 5
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkJobAcceptedResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Bulk order shipping is available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: Arrange and ship in Seller Center for now; avoid bulk API shipping for production cutover until confirmed.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrderBulkShipRequest"
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/orders/bulk-cancel:
    post:
      summary: Cancel multiple orders in a single request (max 50)
      tags:
        - Orders
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkOrderCancelResponse"
        "202":
          description: Asynchronous job accepted
          headers:
            Location:
              schema:
                type: string
            Retry-After:
              schema:
                type: integer
                example: 5
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkJobAcceptedResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrderBulkCancelRequest"
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/inventory:
    get:
      summary: List inventory items with pagination
      tags:
        - Inventory
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InventoryItemListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - inventory:read
      x-scope: inventory:read
      x-requires-seller-token: true
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: sku
          in: query
          schema:
            type: string
          description: Seller SKU used to filter inventory items.
        - name: cursor
          in: query
          schema:
            type: string
          description: Pagination cursor returned by a previous response page.
  /open/v1/inventory/{id}:
    put:
      summary: Update inventory for a single item
      tags:
        - Inventory
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InventoryItemResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Single inventory updates are available with limited exact-stock confirmation.
      x-availability: limited
      x-workaround: Update stock in Seller Center for now when exact stock checks are required.
      security:
        - hmacAuth: []
          sellerOAuth:
            - inventory:write
      x-scope: inventory:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The inventory item ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InventoryUpdateRequest"
  /open/v1/inventory/bulk-update:
    post:
      summary: Bulk update inventory levels
      tags:
        - Inventory
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InventoryBulkUpdateResponse"
        "202":
          description: Asynchronous job accepted
          headers:
            Location:
              schema:
                type: string
            Retry-After:
              schema:
                type: integer
                example: 5
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkJobAcceptedResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Bulk inventory updates are available with limited batch confirmation.
      x-availability: limited
      x-workaround: Use Seller Center or smaller verified batches for stock updates for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - inventory:write
      x-scope: inventory:write
      x-requires-seller-token: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InventoryBulkUpdateRequest"
  /open/v1/fulfillments:
    get:
      summary: List fulfillments
      tags:
        - Fulfillments
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FulfillmentListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Fulfillment listing is available with limited pagination confirmation.
      x-availability: limited
      x-workaround: Use Seller Center fulfillment views for reconciliation for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - fulfillment:read
      x-scope: fulfillment:read
      x-requires-seller-token: true
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: status
          in: query
          schema:
            type: string
          description: Fulfillment status to include in the list.
        - name: order_id
          in: query
          schema:
            type: string
          description: Order ID used to filter related records.
        - name: created_before
          in: query
          schema:
            type: string
            format: date-time
          description: Return records created before this ISO-8601 timestamp.
        - name: cursor
          in: query
          schema:
            type: string
          description: Pagination cursor returned by a previous response page.
    post:
      summary: Create a fulfillment
      tags:
        - Fulfillments
      responses:
        "201":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FulfillmentResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Fulfillment creation is available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: Create fulfillments in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - fulfillment:write
      x-scope: fulfillment:write
      x-requires-seller-token: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FulfillmentCreateRequest"
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/fulfillments/{id}:
    get:
      summary: Get a single fulfillment by ID
      tags:
        - Fulfillments
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FulfillmentResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Fulfillment detail lookup is available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: Check fulfillment details in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - fulfillment:read
      x-scope: fulfillment:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The fulfillment ID.
    put:
      summary: Update a fulfillment
      tags:
        - Fulfillments
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FulfillmentResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Fulfillment updates are available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: Update fulfillments in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - fulfillment:write
      x-scope: fulfillment:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The fulfillment ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FulfillmentUpdateRequest"
  /open/v1/sellers:
    get:
      summary: List sellers
      tags:
        - Sellers
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SellerListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      x-scope: seller:read
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
  /open/v1/sellers/{id}:
    get:
      summary: Get seller details by ID
      tags:
        - Sellers
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SellerResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - seller:read
      x-scope: seller:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The seller ID.
  /open/v1/shop:
    get:
      summary: Get the authenticated shop's profile (seller bound to the access token)
      tags:
        - Shop
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShopResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - seller:read
      x-scope: seller:read
      x-requires-seller-token: true
  /open/v1/shop/status:
    get:
      summary: Get the authenticated shop's live status (operability + buyer visibility) and last status-change timestamp
      tags:
        - Shop
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShopStatusResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - seller:read
      x-scope: seller:read
      x-requires-seller-token: true
  /open/v1/shop/shipping-channels:
    get:
      summary: List shipping channels enabled for the authenticated shop (channel_id, name, enabled). Disabled channels are excluded.
      tags:
        - Shop
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShippingChannelListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
  /open/v1/seller/profile:
    get:
      summary: Get the authenticated seller profile
      tags:
        - Seller
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SellerProfileResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - seller:read
      x-scope: seller:read
      x-requires-seller-token: true
  /open/v1/returns:
    get:
      summary: List return cases (return_refund / cancellation / failed_delivery) with type + status filters
      tags:
        - Returns
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReturnCaseListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
          description: Maximum number of records to return.
        - name: type
          in: query
          schema:
            type: string
            enum:
              - return_refund
              - cancellation
              - failed_delivery
          description: Return case type to include in the list.
        - name: status
          in: query
          schema:
            type: string
            enum:
              - pending
              - approved
              - disputed
              - resolved
          description: Return case status to include in the list.
        - name: order_id
          in: query
          schema:
            type: string
          description: Order ID used to filter related records.
        - name: created_before
          in: query
          schema:
            type: string
            format: date-time
          description: Return records created before this ISO-8601 timestamp.
        - name: cursor
          in: query
          schema:
            type: string
          description: Pagination cursor returned by a previous response page.
    post:
      summary: Create a return request (RMA proxy) for one or more line items
      tags:
        - Returns
      responses:
        "201":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReturnResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Return creation is not yet available through the Open API.
      x-availability: not-yet
      x-workaround: Create the return in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReturnCreateRequest"
  /open/v1/returns/{id}:
    get:
      summary: Get a single return case by ID (full detail incl. dispute window + buyer evidence; 403 for cross-shop)
      tags:
        - Returns
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReturnResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The return case ID.
  /open/v1/returns/{id}/approve:
    post:
      summary: Approve a pending return request (authorises the refund workflow to the buyer)
      tags:
        - Returns
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReturnResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Return approval is available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: Process return approval in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The return case ID.
  /open/v1/returns/{id}/reject:
    post:
      summary: Reject a return request
      tags:
        - Returns
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReturnResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Return rejection is available with limited reason-handling support.
      x-availability: limited
      x-workaround: Process return rejection in Seller Center or partner support workflow for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The return case ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReturnRejectRequest"
  /open/v1/returns/dispute-reasons:
    get:
      summary: List the valid dispute reason codes
      tags:
        - Returns
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DisputeReasonListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
  /open/v1/returns/{id}/approve-refund:
    post:
      summary: Approve the refund for a received return
      tags:
        - Returns
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReturnResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Refund approval is available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: Process refund approval in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The return case ID.
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key, generated per request, used to safely retry this call.
          schema:
            type: string
            minLength: 1
  /open/v1/returns/{id}/dispute:
    post:
      summary: Dispute a return request with a reason code and seller evidence attachments
      tags:
        - Returns
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReturnResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: The requested resource does not exist or is not visible to the authenticated seller
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "409":
          description: The request conflicts with the current resource state or reuses an idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "413":
          description: The request body exceeds the endpoint payload limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "422":
          description: The request is well-formed but cannot be processed in the resource’s current state
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Return dispute filing is available with limited production-readiness confirmation.
      x-availability: limited
      x-workaround: File and manage the dispute in Seller Center for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:write
      x-scope: orders:write
      x-requires-seller-token: true
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The return case ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReturnDisputeRequest"
  /open/v1/shipping/options:
    get:
      summary: List available shipping options
      tags:
        - Shipping
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShippingOptionListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
      x-scope: orders:read
      parameters:
        - name: origin_region
          in: query
          schema:
            type: string
          description: Origin region using PSGC-aligned Philippine geography.
        - name: origin_province
          in: query
          schema:
            type: string
          description: Origin province using PSGC-aligned Philippine geography.
        - name: origin_city
          in: query
          schema:
            type: string
          description: Origin city or municipality using PSGC-aligned Philippine geography.
        - name: destination_region
          in: query
          schema:
            type: string
          description: Destination region using PSGC-aligned Philippine geography.
        - name: destination_province
          in: query
          schema:
            type: string
          description: Destination province using PSGC-aligned Philippine geography.
        - name: destination_city
          in: query
          schema:
            type: string
          description: Destination city or municipality using PSGC-aligned Philippine geography.
        - name: actual_weight
          in: query
          schema:
            type: number
            minimum: 0
            exclusiveMinimum: true
          description: Package actual weight in grams.
        - name: length
          in: query
          schema:
            type: number
            minimum: 0
            exclusiveMinimum: true
          description: Package length in centimetres.
        - name: width
          in: query
          schema:
            type: number
            minimum: 0
            exclusiveMinimum: true
          description: Package width in centimetres.
        - name: height
          in: query
          schema:
            type: number
            minimum: 0
            exclusiveMinimum: true
          description: Package height in centimetres.
        - name: insurance_enabled
          in: query
          schema:
            type: boolean
          description: Whether to include shipping insurance in the quote.
        - name: order_amount
          in: query
          schema:
            type: number
            minimum: 0
          description: Order amount used for the quote. Send an integer-valued amount in PHP centavos.
  /open/v1/shipment/pickup-addresses:
    get:
      summary: List pickup addresses registered for the authenticated shop, with per-address capability flags (pickup_eligible, dropoff_eligible).
      tags:
        - Shipment
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PickupAddressListResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      x-availability: available
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
  /open/v1/payouts:
    get:
      summary: Per-order settlement breakdown for the authenticated seller (settled payouts only). Supports order_id, released_after, released_before, and standard pagination.
      tags:
        - Payouts
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SuccessResponse"
        "400":
          description: Validation error, or a missing/malformed required signing header (BAD_REQUEST)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "403":
          description: Forbidden — insufficient scope
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "429":
          description: The partner or endpoint rate limit has been exceeded
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "502":
          description: The upstream commerce service rejected the request or returned an invalid response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "503":
          description: A required platform or upstream dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "504":
          description: The upstream commerce service did not respond before the platform timeout
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
      description: Payout listing is available with limited multi-page filtering confirmation.
      x-availability: limited
      x-workaround: Use Seller Center payout reports for reconciliation for now.
      security:
        - hmacAuth: []
          sellerOAuth:
            - orders:read
      x-scope: orders:read
      x-requires-seller-token: true
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: 1-based page number to return.
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 200
          description: Maximum number of records to return.
        - name: order_id
          in: query
          schema:
            type: string
          description: Order ID used to filter related records.
        - name: released_after
          in: query
          schema:
            type: string
            format: date-time
          description: Return payouts released at or after this ISO-8601 timestamp.
        - name: released_before
          in: query
          schema:
            type: string
            format: date-time
          description: Return payouts released before this ISO-8601 timestamp.
x-webhook-event-schemas:
  order.created: "#/components/schemas/WebhookOrderEnvelope"
  order.updated: "#/components/schemas/WebhookOrderEnvelope"
  order.shipped: "#/components/schemas/WebhookOrderEnvelope"
  order.cancelled: "#/components/schemas/WebhookOrderEnvelope"
  order.status.updated: "#/components/schemas/WebhookOrderStatusEnvelope"
  inventory.updated: "#/components/schemas/WebhookInventoryEnvelope"
  product.created: "#/components/schemas/WebhookProductEnvelope"
  product.updated: "#/components/schemas/WebhookProductUpdatedEnvelope"
  product.stock.updated: "#/components/schemas/WebhookProductStockEnvelope"
  product.price.updated: "#/components/schemas/WebhookProductPriceEnvelope"
  product.deleted: "#/components/schemas/WebhookProductDeletedEnvelope"
  fulfillment.created: "#/components/schemas/WebhookFulfillmentEnvelope"
  fulfillment.updated: "#/components/schemas/WebhookFulfillmentEnvelope"
  fulfillment.shipped: "#/components/schemas/WebhookFulfillmentEnvelope"
  return.created: "#/components/schemas/WebhookReturnEnvelope"
  return.approved: "#/components/schemas/WebhookReturnEnvelope"
  return.rejected: "#/components/schemas/WebhookReturnEnvelope"
  return.disputed: "#/components/schemas/WebhookReturnEnvelope"
  return.status.updated: "#/components/schemas/WebhookReturnStatusEnvelope"
  authorization.granted: "#/components/schemas/WebhookAuthorizationEnvelope"
  authorization.revoked: "#/components/schemas/WebhookAuthorizationEnvelope"
  authorization.expiring: "#/components/schemas/WebhookAuthorizationExpiringEnvelope"
components:
  securitySchemes:
    hmacAuth:
      type: apiKey
      in: header
      name: X-MallPlus-Signature
      description: 'HMAC-SHA256 signature (v3). Base string: "{timestamp}:{clientId}:{METHOD}:{path}:{queryCanonical}:{sha256(body)}:{nonce}" where sha256(body) is the lowercase hex SHA-256 digest of the raw request body (digest of the empty string when there is no body), queryCanonical is the sorted percent-encoded query string (empty string when there is none), and nonce is a client-generated 32-64 char lowercase-hex value, unique per request. Also requires X-MallPlus-Partner-Id, X-MallPlus-Timestamp, X-MallPlus-Signature-Version (must be "3"), and X-MallPlus-Nonce headers. Standard data routes use the deployment-configured timestamp window (90 seconds by default); OAuth authorize/token/refresh/revoke v3 requests use 120 seconds. On standard data routes, v1 is rejected and v2 (5-field base string, no query/nonce) is dual-accepted only while HMAC_V2_GRACE_UNTIL is set to a future date; after cutover v2 returns 401 HMAC_VERSION_DEPRECATED. OAuth authorize/token/refresh/revoke routes reject an explicit version 2; their temporary legacy mode is selected only by omitting the version header. Routes flagged x-requires-seller-token additionally require X-MallPlus-Access-Token + X-MallPlus-Seller-Id; HMAC-only access returns 401 SELLER_TOKEN_REQUIRED.'
    sellerAuthSession:
      type: apiKey
      in: cookie
      name: mp_seller_auth_session
      description: Short-lived, HttpOnly authorization-session cookie set during the seller consent flow. Used only by seller-verify-otp and seller-consent; partner API clients do not create this cookie.
    sellerOAuth:
      type: oauth2
      description: Seller-scoped access. After OAuth consent, include access_token and seller_id as X-MallPlus-Access-Token / X-MallPlus-Seller-Id headers (query-param form is deprecated). The HMAC v3 base string is the SAME as public mode — "{timestamp}:{clientId}:{METHOD}:{path}:{queryCanonical}:{sha256(body)}:{nonce}"; access_token and seller_id are NOT included in the signature. Required for any operation flagged x-requires-seller-token (orders, inventory, returns, fulfillments, product writes, sellers/:id).
      flows:
        authorizationCode:
          authorizationUrl: /open/v1/auth/authorize
          tokenUrl: /open/v1/auth/token
          refreshUrl: /open/v1/auth/token/refresh
          scopes:
            catalog:read: Read products and categories
            catalog:write: Create, update, delete products
            orders:read: Read orders, returns, shipping options
            orders:write: Ship, cancel orders; approve/reject returns
            inventory:read: Read inventory levels
            inventory:write: Update inventory levels
            fulfillment:read: Read fulfillments
            fulfillment:write: Create and update fulfillments
            seller:read: Read seller information
  schemas:
    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: object
          description: Response payload (varies by endpoint)
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
    AuthorizationListResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the request completed successfully.
        data:
          type: array
          items:
            type: object
            required:
              - seller_id
              - scopes
              - status
              - granted_at
              - expires_at
            properties:
              seller_id:
                type: string
                description: Seller identifier — the value used by seller-token calls and POST /auth/revoke.
              seller_name:
                type: string
                nullable: true
                description: Display name of the seller.
              scopes:
                type: array
                items:
                  type: string
                description: OAuth scopes requested or granted.
              status:
                type: string
                enum:
                  - active
                  - revoked
                  - expired
                description: Effective grant status. A stored grant past its 365-day expiry is reported as expired even before the lazy storage flip.
              granted_at:
                type: string
                format: date-time
                description: Granted at as an ISO-8601 timestamp.
              expires_at:
                type: string
                format: date-time
                description: End of the 365-day authorization window; the seller must re-consent after this. ISO-8601 timestamp.
          description: Response or event payload for this schema.
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
    BulkJobAcceptedResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the request completed successfully.
        data:
          type: object
          required:
            - job_id
            - status
            - location
          properties:
            job_id:
              type: string
              description: Asynchronous bulk job ID.
            status:
              type: string
              enum:
                - pending
              description: Current status for this resource or workflow.
            location:
              type: string
              description: Sanitized scan location.
          description: Response or event payload for this schema.
    BulkJobResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the request completed successfully.
        data:
          type: object
          required:
            - job_id
            - operation
            - status
            - summary
            - items
            - pagination
          properties:
            job_id:
              type: string
              description: Asynchronous bulk job ID.
            operation:
              type: string
              enum:
                - product_create
                - inventory_update
                - order_ship
                - order_cancel
              description: Bulk operation type executed by the job.
            status:
              type: string
              enum:
                - pending
                - processing
                - completed
                - partial_success
                - failed
                - cancelled
              description: Current status for this resource or workflow.
            summary:
              type: object
              properties:
                total:
                  type: integer
                  description: Total number of items in this summary.
                succeeded:
                  type: integer
                  description: Number of items that completed successfully.
                failed:
                  type: integer
                  description: Number of items that failed.
                outcome_unknown:
                  type: integer
                  description: Number of items whose final outcome is not yet known.
              description: Summary details.
            items:
              type: array
              items:
                type: object
              description: Items associated with this request, response, or event.
            pagination:
              type: object
              properties:
                offset:
                  type: integer
                  description: 0-based item offset for this result page.
                limit:
                  type: integer
                  maximum: 100
                  description: Maximum number of result items returned in this page.
              description: Pagination details.
          description: Response or event payload for this schema.
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
          description: Whether the request completed successfully.
        error:
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code
              enum:
                - ACCOUNT_LOCKED
                - APPROVE_FAILED
                - APP_LIMIT_REACHED
                - APP_NOT_FOUND
                - AUTHORIZATION_CODE_EXPIRED
                - AUTHORIZATION_REVOKED
                - AUTH_CODE_EXPIRED
                - AUTH_CODE_USED
                - BAD_REQUEST
                - CANCELLATION_ALREADY_PROCESSED
                - CANCELLATION_DEADLINE_EXCEEDED
                - CANCEL_FAILED
                - CANNOT_DELETE_ACCOUNT_WITH_APPS
                - CONCURRENT_MODIFICATION
                - CONFLICT
                - CREATE_FAILED
                - DISPUTE_FAILED
                - DUPLICATE
                - EMAIL_ALREADY_EXISTS
                - EMAIL_NOT_VERIFIED
                - FILE_TOO_LARGE
                - FORBIDDEN
                - HMAC_VERSION_DEPRECATED
                - IDEMPOTENCY_KEY_IN_PROGRESS
                - IDEMPOTENCY_KEY_REQUIRED
                - IDEMPOTENCY_KEY_REUSED
                - INTERNAL_ERROR
                - INVALID_AUTHORIZATION_CODE
                - INVALID_CREDENTIALS
                - INVALID_DEVELOPER_TYPE
                - INVALID_FILE_CONTENT
                - INVALID_FILE_TYPE
                - INVALID_JSON
                - INVALID_NONCE
                - INVALID_PATH
                - INVALID_PICKUP_DATE
                - INVALID_REFRESH_TOKEN
                - INVALID_REQUEST
                - INVALID_SIGNATURE
                - INVALID_STATE
                - INVALID_TRANSITION
                - INVALID_VERIFICATION_TOKEN
                - MAINTENANCE
                - MEMBER_PERMISSION_DENIED
                - MISSING_NONCE
                - NONCE_REUSED
                - NOT_FOUND
                - NOT_IMPLEMENTED
                - ORDER_NOT_CANCELLABLE
                - PAYLOAD_TOO_LARGE
                - PICKUP_DATES_UNAVAILABLE
                - PRODUCT_HAS_ACTIVE_ORDERS
                - PRODUCT_UNDER_REVIEW
                - PROFILE_ALREADY_SUBMITTED
                - PROFILE_TYPE_MISMATCH
                - PROXY_ERROR
                - RATE_LIMITED
                - REDIRECT_URL_MISMATCH
                - REFRESH_TOKEN_EXPIRED
                - REFRESH_TOKEN_REUSED
                - REJECT_FAILED
                - RETURN_ALREADY_PROCESSED
                - RETURN_DEADLINE_EXCEEDED
                - RE_AUTHORIZATION_REQUIRED
                - SANDBOX_LIMIT_REACHED
                - SELLER_TOKEN_REQUIRED
                - SERVICE_UNAVAILABLE
                - SESSION_EXPIRED
                - SHIPMENT_ALREADY_ARRANGED
                - SHIPMENT_NOT_ARRANGED
                - SHIPPING_LABEL_UNAVAILABLE
                - SHIP_FAILED
                - SIGNATURE_REPLAYED
                - SSRF_CHECK_FAILED
                - TEST_SHOP_LIMIT_REACHED
                - TIMESTAMP_EXPIRED
                - TOKEN_REVOKED
                - TOO_MANY_REQUESTS
                - UNAUTHORIZED
                - UPLOAD_ERROR
                - UPLOAD_NOT_CONFIGURED
                - UPSTREAM_ERROR
                - UPSTREAM_TIMEOUT
                - VALIDATION_ERROR
                - VERIFICATION_LINK_USED
                - VERIFICATION_TOKEN_EXPIRED
                - WEBHOOK_SUBSCRIPTION_EXISTS
            message:
              type: string
              description: Human-readable error description
            details:
              type: object
              additionalProperties: true
              description: "Optional machine-readable context for the error. Shape varies by code — e.g. BAD_REQUEST for missing signing headers carries { missingHeaders: string[] }."
          required:
            - code
            - message
          description: Structured error payload returned when the request fails.
      required:
        - success
        - error
    WebhookEnvelopeBase:
      type: object
      properties:
        event_type:
          type: string
          enum:
            - order.created
            - order.updated
            - order.shipped
            - order.cancelled
            - order.status.updated
            - inventory.updated
            - product.created
            - product.updated
            - product.stock.updated
            - product.price.updated
            - product.deleted
            - fulfillment.created
            - fulfillment.updated
            - fulfillment.shipped
            - return.created
            - return.approved
            - return.rejected
            - return.disputed
            - return.status.updated
            - authorization.granted
            - authorization.revoked
            - authorization.expiring
          description: Webhook event type from the published event catalog.
        event_id:
          type: string
          format: uuid
          description: Unique webhook event ID.
        resource_type:
          type: string
          description: Type of resource represented by this event.
        resource_id:
          type: string
          description: ID of the resource represented by this event.
        occurred_at:
          type: string
          format: date-time
          description: ISO-8601 UTC event-creation time
      required:
        - event_type
        - event_id
        - resource_type
        - resource_id
        - occurred_at
    WebhookOrderEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/Order"
              description: Response or event payload for this schema.
          required:
            - data
    WebhookOrderStatusEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              type: object
              properties:
                order_id:
                  type: string
                  description: Order ID associated with this value.
                new_status:
                  type: string
                  description: Status after the event update.
                previous_status:
                  type: string
                  description: Status before the event update.
              required:
                - order_id
                - new_status
                - previous_status
              description: Response or event payload for this schema.
          required:
            - data
    WebhookInventoryItem:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
          description: Unique identifier for this resource.
        sku:
          type: string
          description: Seller SKU.
        quantity:
          type: integer
          description: Quantity of units.
        sellerId:
          type: string
          description: Seller ID associated with this value.
        title:
          type: string
          description: Partner-visible title.
        reserved_quantity:
          type: integer
          description: Inventory quantity reserved for open orders.
        incoming_quantity:
          type: integer
          description: Inventory quantity expected from inbound stock.
        variantId:
          type: string
          description: Product variant ID associated with this value.
        created_at:
          type: string
          format: date-time
          description: Created at as an ISO-8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: Updated at as an ISO-8601 timestamp.
      required:
        - id
        - sku
        - quantity
    BulkSummary:
      type: object
      additionalProperties: false
      properties:
        total:
          type: integer
          description: Total number of items in this summary.
        succeeded:
          type: integer
          description: Number of items that completed successfully.
        failed:
          type: integer
          description: Number of items that failed.
      required:
        - total
        - succeeded
        - failed
    WebhookInventoryData:
      oneOf:
        - $ref: "#/components/schemas/WebhookInventoryItem"
        - type: object
          properties:
            updated:
              type: array
              items:
                $ref: "#/components/schemas/WebhookInventoryItem"
              description: Resources updated by this event.
            summary:
              $ref: "#/components/schemas/BulkSummary"
              description: Summary details.
          required:
            - updated
            - summary
        - type: object
          properties:
            product_id:
              type: string
              description: Product ID associated with this value.
            items:
              type: array
              items:
                type: object
                additionalProperties: true
              description: Items associated with this request, response, or event.
          required:
            - product_id
            - items
    WebhookInventoryEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/WebhookInventoryData"
              description: Response or event payload for this schema.
          required:
            - data
    WebhookProductEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/Product"
              description: Response or event payload for this schema.
          required:
            - data
    WebhookProductUpdatedEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              oneOf:
                - $ref: "#/components/schemas/Product"
                - type: object
                  properties:
                    product_id:
                      type: string
                      description: Product ID associated with this value.
                    status:
                      type: string
                      description: Current status for this resource or workflow.
                  required:
                    - product_id
                    - status
              description: Response or event payload for this schema.
          required:
            - data
    WebhookProductStockEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/WebhookInventoryData"
              description: Response or event payload for this schema.
          required:
            - data
    WebhookProductPriceEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              type: object
              properties:
                product_id:
                  type: string
                  description: Product ID associated with this value.
                updated:
                  type: array
                  items:
                    type: object
                    properties:
                      variant_id:
                        type: string
                        description: Product variant ID associated with this value.
                      new_price:
                        type: integer
                        description: Integer amount in PHP centavos.
                    required:
                      - variant_id
                      - new_price
                  description: Resources updated by this event.
              required:
                - product_id
                - updated
              description: Response or event payload for this schema.
          required:
            - data
    WebhookProductDeletedEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              type: object
              properties:
                product_id:
                  type: string
                  description: Product ID associated with this value.
                deleted:
                  type: boolean
                  enum:
                    - true
                  description: Whether deleted is true.
              required:
                - product_id
                - deleted
              description: Response or event payload for this schema.
          required:
            - data
    WebhookFulfillmentEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/Fulfillment"
              description: Response or event payload for this schema.
          required:
            - data
    WebhookReturn:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
          description: Unique identifier for this resource.
        orderId:
          type: string
          description: Order ID associated with this value.
        status:
          type: string
          description: Current status for this resource or workflow.
        reason:
          type: string
          description: Reason provided for the request or status.
        items:
          type: array
          items:
            $ref: "#/components/schemas/ReturnItemRequest"
          description: Items associated with this request, response, or event.
        refundAmount:
          type: integer
          description: Integer amount in PHP centavos.
        sellerId:
          type: string
          description: Seller ID associated with this value.
        rejection_reason:
          type: string
          description: Rejection reason value.
        dispute_reason_code:
          type: string
          description: Dispute reason code value.
        dispute_note:
          type: string
          description: Dispute note value.
        created_at:
          type: string
          format: date-time
          description: Created at as an ISO-8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: Updated at as an ISO-8601 timestamp.
      required:
        - id
        - orderId
        - status
        - reason
        - items
    WebhookReturnEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/WebhookReturn"
              description: Response or event payload for this schema.
          required:
            - data
    WebhookReturnStatusEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              type: object
              properties:
                return_id:
                  type: string
                  description: Return case ID associated with this value.
                order_id:
                  type: string
                  description: Order ID associated with this value.
                new_status:
                  type: string
                  description: Status after the event update.
                previous_status:
                  type: string
                  description: Status before the event update.
              required:
                - return_id
                - order_id
                - new_status
                - previous_status
              description: Response or event payload for this schema.
          required:
            - data
    WebhookAuthorizationEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              type: object
              properties:
                authorization_id:
                  type: string
                  description: Seller authorization ID associated with this value.
                seller_id:
                  type: string
                  description: Seller ID associated with this value.
                app_id:
                  type: string
                  description: App id value.
              required:
                - authorization_id
              description: Response or event payload for this schema.
          required:
            - data
    WebhookAuthorizationExpiringEnvelope:
      allOf:
        - $ref: "#/components/schemas/WebhookEnvelopeBase"
        - type: object
          properties:
            data:
              type: object
              properties:
                authorization_id:
                  type: string
                  description: Seller authorization ID associated with this value.
                expires_at:
                  type: integer
                  description: Unix epoch seconds
                seller_id:
                  type: string
                  description: Seller ID associated with this value.
                app_id:
                  type: string
                  description: App id value.
              required:
                - authorization_id
                - expires_at
              description: Response or event payload for this schema.
          required:
            - data
    PaginationMeta:
      type: object
      properties:
        page:
          type: integer
          example: 1
          description: 1-based page number represented by this response page.
        limit:
          type: integer
          example: 20
          description: Maximum number of records returned in this response page.
        total:
          type: integer
          example: 150
          description: Total number of records matching the request filters.
    EmptyObject:
      type: object
      additionalProperties: false
    TokenRequest:
      type: object
      additionalProperties: false
      properties:
        code:
          type: string
          minLength: 1
          description: Machine-readable code for this value.
        client_id:
          type: string
          minLength: 1
          description: Partner application client ID.
        seller_id:
          type: string
          minLength: 1
          description: Seller ID associated with this value.
      required:
        - code
        - client_id
        - seller_id
    RefreshTokenRequest:
      type: object
      additionalProperties: false
      properties:
        refresh_token:
          type: string
          minLength: 1
          description: Refresh token used to obtain a new access token.
        client_id:
          type: string
          minLength: 1
          description: Partner application client ID.
        seller_id:
          type: string
          minLength: 1
          description: Seller ID associated with this value.
      required:
        - refresh_token
        - client_id
        - seller_id
    RevokeAuthorizationRequest:
      type: object
      additionalProperties: false
      properties:
        client_id:
          type: string
          minLength: 1
          description: Partner application client ID.
        seller_id:
          type: string
          minLength: 1
          description: Seller ID associated with this value.
      required:
        - client_id
        - seller_id
    DenyAuthorizationRequest:
      type: object
      additionalProperties: false
      properties:
        client_id:
          type: string
          minLength: 1
          description: Partner application client ID.
        redirect_uri:
          type: string
          format: uri
          description: Registered redirect URI for the OAuth flow.
        state:
          type: string
          maxLength: 1024
          description: State value.
      required:
        - client_id
        - redirect_uri
    SellerVerifyRequest:
      type: object
      additionalProperties: false
      description: Provide either email or identifier together with the remaining required fields.
      properties:
        email:
          type: string
          anyOf:
            - format: email
            - pattern: ^[A-Za-z0-9_-]{12}$
          description: Email address.
        identifier:
          type: string
          minLength: 1
          description: Seller login identifier.
        password:
          type: string
          minLength: 1
          description: Seller password used for verification.
        client_id:
          type: string
          minLength: 1
          description: Partner application client ID.
        redirect_uri:
          type: string
          format: uri
          description: Registered redirect URI for the OAuth flow.
        state:
          type: string
          maxLength: 1024
          description: State value.
        scopes:
          type: array
          maxItems: 50
          items:
            type: string
          description: OAuth scopes requested or granted.
      required:
        - password
        - client_id
        - redirect_uri
      anyOf:
        - required:
            - email
        - required:
            - identifier
    SellerVerifyOtpRequest:
      type: object
      additionalProperties: false
      properties:
        otp:
          type: string
          pattern: ^\d{6}$
          description: Six-digit one-time password.
      required:
        - otp
    SandboxOrderItemRequest:
      type: object
      additionalProperties: false
      description: A sandbox order line item to create for simulation.
      properties:
        productId:
          type: string
          maxLength: 64
          description: Product ID associated with this value.
        title:
          type: string
          maxLength: 200
          description: Partner-visible title.
        sku:
          type: string
          maxLength: 64
          description: Seller SKU.
        quantity:
          type: integer
          minimum: 1
          maximum: 1000000
          description: Quantity of units.
        unitPrice:
          type: integer
          minimum: 0
          maximum: 99999999
          description: Integer amount in PHP centavos.
      required:
        - quantity
    SandboxOrderRequest:
      type: object
      additionalProperties: false
      properties:
        sellerId:
          type: string
          minLength: 1
          maxLength: 64
          description: Seller ID associated with this value.
        buyerId:
          type: string
          minLength: 1
          maxLength: 64
          description: Sandbox buyer ID associated with this order.
        sandboxId:
          type: string
          maxLength: 64
          description: Sandbox shop or fixture set ID.
        items:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/SandboxOrderItemRequest"
          description: Items associated with this request, response, or event.
        paymentMethod:
          type: string
          maxLength: 40
          description: Payment method used by the sandbox order.
        shippingOptionId:
          type: string
          maxLength: 64
          description: Shipping option ID selected by the sandbox order.
        shippingOptionName:
          type: string
          maxLength: 120
          description: Shipping option name selected by the sandbox order.
      required:
        - sellerId
        - buyerId
        - items
    SandboxSeedRequest:
      type: object
      additionalProperties: false
      properties:
        sandboxId:
          type: string
          minLength: 1
          maxLength: 64
          description: Owned sandbox shop to seed; optional only when the developer has exactly one shop.
    SandboxSellerCreateRequest:
      type: object
      additionalProperties: false
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Partner-visible name.
        email:
          type: string
          format: email
          maxLength: 254
          description: Email address.
        storeName:
          type: string
          minLength: 1
          maxLength: 120
          description: Sandbox seller store name.
      required:
        - name
        - email
        - storeName
    SandboxBuyerShippingAddressRequest:
      type: object
      additionalProperties: false
      properties:
        line1:
          type: string
          minLength: 1
          maxLength: 200
          description: First line of the street address.
        line2:
          type: string
          maxLength: 200
          description: Second line of the street address, when present.
        city:
          type: string
          minLength: 1
          maxLength: 100
          description: PSGC-aligned Philippine city or municipality.
        region:
          type: string
          minLength: 1
          maxLength: 100
          description: PSGC-aligned Philippine region.
        postalCode:
          type: string
          minLength: 1
          maxLength: 20
          description: Postal code for the address.
        country:
          type: string
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2 country code.
      required:
        - line1
        - city
        - region
        - postalCode
        - country
    SandboxBuyerCreateRequest:
      type: object
      additionalProperties: false
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Partner-visible name.
        email:
          type: string
          format: email
          maxLength: 254
          description: Email address.
        phoneNumber:
          type: string
          minLength: 1
          maxLength: 40
          description: Contact phone number.
        shippingAddress:
          $ref: "#/components/schemas/SandboxBuyerShippingAddressRequest"
          description: Shipping address details.
      required:
        - name
        - email
        - phoneNumber
        - shippingAddress
    WebhookCreateRequest:
      type: object
      additionalProperties: false
      properties:
        eventType:
          type: string
          enum:
            - order.created
            - order.updated
            - order.shipped
            - order.cancelled
            - order.status.updated
            - inventory.updated
            - product.created
            - product.updated
            - product.stock.updated
            - product.price.updated
            - product.deleted
            - fulfillment.created
            - fulfillment.updated
            - fulfillment.shipped
            - return.created
            - return.approved
            - return.rejected
            - return.disputed
            - return.status.updated
            - authorization.granted
            - authorization.revoked
            - authorization.expiring
          description: One value from the published webhook event catalog.
        callbackUrl:
          type: string
          format: uri
          pattern: ^https://
          description: Public HTTPS URL. Private, loopback, link-local, and metadata destinations are rejected.
      required:
        - eventType
        - callbackUrl
    WebhookUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        callbackUrl:
          type: string
          format: uri
          pattern: ^https://
          description: Public HTTPS URL. Private, loopback, link-local, and metadata destinations are rejected.
        isActive:
          type: boolean
          description: Whether the webhook subscription is active.
    WebhookTestRequest:
      type: object
      additionalProperties: false
      properties:
        event:
          type: string
          enum:
            - order.created
            - order.updated
            - order.shipped
            - order.cancelled
            - order.status.updated
            - inventory.updated
            - product.created
            - product.updated
            - product.stock.updated
            - product.price.updated
            - product.deleted
            - fulfillment.created
            - fulfillment.updated
            - fulfillment.shipped
            - return.created
            - return.approved
            - return.rejected
            - return.disputed
            - return.status.updated
            - authorization.granted
            - authorization.revoked
            - authorization.expiring
          description: One value from the published webhook event catalog.
      required:
        - event
    OrderItemQuantityRequest:
      type: object
      additionalProperties: false
      description: A line item and the quantity to act on.
      properties:
        itemId:
          type: string
          maxLength: 64
          description: Line item ID.
        quantity:
          type: integer
          minimum: 1
          maximum: 1000000
          description: Quantity of units.
      required:
        - itemId
        - quantity
    OrderShipRequest:
      type: object
      additionalProperties: false
      properties:
        trackingNumber:
          type: string
          minLength: 1
          maxLength: 120
          description: Partner-provided tracking number.
        trackingCompany:
          type: string
          minLength: 1
          maxLength: 80
          description: Partner-provided tracking company name.
        items:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/OrderItemQuantityRequest"
          description: Items associated with this request, response, or event.
      required:
        - trackingNumber
        - trackingCompany
        - items
    ProductVariantCreateRequest:
      type: object
      additionalProperties: false
      description: 'A product variant to create with its price, stock, and option values. Supply `options` as the variant axis values (for example `{"Colour":"Red","Size":"M"}`); the option groups they belong to are what the product detail page renders its selectors from, so a variant set with no option values renders as a single un-selectable listing. Physical attributes are required on each variant only when the product sets `use_variant_dimensions: true`.'
      properties:
        title:
          type: string
          minLength: 1
          maxLength: 200
          description: Partner-visible title.
        sku:
          type: string
          minLength: 1
          maxLength: 100
          description: Seller SKU.
        price:
          type: integer
          minimum: 0
          maximum: 99999999
          description: Integer amount in PHP centavos.
        stock:
          type: integer
          minimum: 0
          maximum: 1000000000
          description: Stock count for the primary variant.
        options:
          type: object
          description: Variant axis values keyed by option-group name. Required for correct PDP rendering when the product has more than one variant.
          additionalProperties:
            type: string
            maxLength: 200
        images:
          type: array
          maxItems: 20
          description: Variant-specific image URLs. Falls back to the product images when omitted.
          items:
            type: string
            format: uri
            pattern: ^https://
            maxLength: 2048
        weight:
          type: number
          exclusiveMinimum: 0
          description: "Variant weight in GRAMS. Required when the product sets `use_variant_dimensions: true`."
        length:
          type: number
          exclusiveMinimum: 0
          description: "Variant length in CENTIMETRES. Required when the product sets `use_variant_dimensions: true`."
        width:
          type: number
          exclusiveMinimum: 0
          description: "Variant width in CENTIMETRES. Required when the product sets `use_variant_dimensions: true`."
        height:
          type: number
          exclusiveMinimum: 0
          description: "Variant height in CENTIMETRES. Required when the product sets `use_variant_dimensions: true`."
      required:
        - price
        - stock
    ProductCreateRequest:
      type: object
      additionalProperties: false
      properties:
        title:
          type: string
          minLength: 8
          maxLength: 100
          description: Product title, 8-100 characters.
        description:
          type: string
          maxLength: 10000
          description: Human-readable description.
        category:
          type: string
          minLength: 1
          maxLength: 120
          description: Category id. Must be a LEAF category (one with no active children) — a parent category is rejected. The mandatory attributes for the chosen category are discoverable via GET /open/v1/categories/{id}/attributes.
        images:
          type: array
          minItems: 1
          maxItems: 20
          description: Product image URLs. At least one HTTPS URL is required.
          items:
            type: string
            format: uri
            pattern: ^https://
            maxLength: 2048
        weight:
          type: number
          exclusiveMinimum: 0
          description: Shipping weight in GRAMS. Required unless `use_variant_dimensions` is true.
        length:
          type: number
          exclusiveMinimum: 0
          description: Parcel length in CENTIMETRES. Required unless `use_variant_dimensions` is true.
        width:
          type: number
          exclusiveMinimum: 0
          description: Parcel width in CENTIMETRES. Required unless `use_variant_dimensions` is true.
        height:
          type: number
          exclusiveMinimum: 0
          description: Parcel height in CENTIMETRES. Required unless `use_variant_dimensions` is true.
        use_variant_dimensions:
          type: boolean
          description: Ship by variant. When true, weight and dimensions are required on EVERY variant instead of on the product, and the product-level figures are derived from them.
        attribute_values:
          type: array
          maxItems: 50
          description: Category-mapped attribute values. Which attributes are mandatory, and the allowed values for SELECT/MULTIVALUE types, come from the category — fetch them from GET /open/v1/categories/{id}/attributes.
          items:
            type: object
            additionalProperties: false
            properties:
              attribute_id:
                type: string
                minLength: 1
                maxLength: 255
                description: Attribute id value.
              value:
                oneOf:
                  - type: string
                    maxLength: 1000
                  - type: array
                    maxItems: 50
                    items:
                      type: string
                      maxLength: 500
                description: Value details.
            required:
              - attribute_id
              - value
        variants:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/ProductVariantCreateRequest"
          description: Product variants.
      required:
        - title
        - category
        - variants
        - images
    ProductUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        title:
          type: string
          minLength: 8
          maxLength: 100
          description: Partner-visible title.
        description:
          type: string
          maxLength: 10000
          description: Human-readable description.
        category:
          type: string
          minLength: 1
          maxLength: 120
          description: Product category.
        images:
          type: array
          maxItems: 20
          items:
            type: string
            format: uri
            pattern: ^https://
            maxLength: 2048
          description: Product image URLs.
    ProductBulkItemRequest:
      type: object
      additionalProperties: false
      description: Bulk product input. Every item must carry at least one variant with price and stock, matching the single-create contract.
      properties:
        title:
          type: string
          minLength: 8
          maxLength: 100
          description: Product title, 8-100 characters.
        description:
          type: string
          maxLength: 10000
          description: Human-readable description.
        category:
          type: string
          minLength: 1
          maxLength: 120
          description: Category id. Must be a LEAF category (one with no active children) — a parent category is rejected. The mandatory attributes for the chosen category are discoverable via GET /open/v1/categories/{id}/attributes.
        images:
          type: array
          minItems: 1
          maxItems: 20
          description: Product image URLs. At least one HTTPS URL is required.
          items:
            type: string
            format: uri
            pattern: ^https://
            maxLength: 2048
        weight:
          type: number
          exclusiveMinimum: 0
          description: Shipping weight in GRAMS. Required unless `use_variant_dimensions` is true.
        length:
          type: number
          exclusiveMinimum: 0
          description: Parcel length in CENTIMETRES. Required unless `use_variant_dimensions` is true.
        width:
          type: number
          exclusiveMinimum: 0
          description: Parcel width in CENTIMETRES. Required unless `use_variant_dimensions` is true.
        height:
          type: number
          exclusiveMinimum: 0
          description: Parcel height in CENTIMETRES. Required unless `use_variant_dimensions` is true.
        use_variant_dimensions:
          type: boolean
          description: Ship by variant. When true, weight and dimensions are required on EVERY variant instead of on the product, and the product-level figures are derived from them.
        attribute_values:
          type: array
          maxItems: 50
          description: Category-mapped attribute values. Which attributes are mandatory, and the allowed values for SELECT/MULTIVALUE types, come from the category — fetch them from GET /open/v1/categories/{id}/attributes.
          items:
            type: object
            additionalProperties: false
            properties:
              attribute_id:
                type: string
                minLength: 1
                maxLength: 255
                description: Attribute id value.
              value:
                oneOf:
                  - type: string
                    maxLength: 1000
                  - type: array
                    maxItems: 50
                    items:
                      type: string
                      maxLength: 500
                description: Value details.
            required:
              - attribute_id
              - value
        variants:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/ProductVariantCreateRequest"
          description: Product variants.
      required:
        - title
        - category
        - variants
        - images
    ProductBulkRequest:
      type: object
      additionalProperties: false
      properties:
        products:
          type: array
          minItems: 1
          maxItems: 5000
          items:
            $ref: "#/components/schemas/ProductBulkItemRequest"
          description: Products included in the bulk request.
      required:
        - products
    ProductPriceUpdateItemRequest:
      type: object
      additionalProperties: false
      description: A variant price update to apply in a bulk price request.
      properties:
        variant_id:
          type: string
          minLength: 1
          maxLength: 255
          description: Product variant ID associated with this value.
        price:
          type: integer
          minimum: 1
          maximum: 99999999
          description: Integer amount in PHP centavos.
      required:
        - variant_id
        - price
    ProductPriceUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        updates:
          type: array
          minItems: 1
          maxItems: 50
          items:
            $ref: "#/components/schemas/ProductPriceUpdateItemRequest"
          description: Variant updates to apply.
      required:
        - updates
    ProductStatusUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          enum:
            - live
            - unlisted
            - delisted
          description: The status to apply. Only the settable statuses are accepted here. The read-only statuses (proposed, under_review, archived) are outcomes of other operations and are rejected with 400 VALIDATION_ERROR.
      required:
        - status
    ProductStockUpdateItemRequest:
      type: object
      additionalProperties: false
      description: A variant stock update to apply in a bulk stock request.
      properties:
        variant_id:
          type: string
          minLength: 1
          description: Product variant ID associated with this value.
        stock_quantity:
          type: integer
          minimum: 0
          maximum: 1000000000
          description: Available stock quantity.
      required:
        - variant_id
        - stock_quantity
    ProductStockUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        items:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/ProductStockUpdateItemRequest"
          description: Items associated with this request, response, or event.
      required:
        - items
    ShipmentArrangementRequest:
      oneOf:
        - type: object
          additionalProperties: false
          properties:
            type:
              type: string
              enum:
                - pickup
              description: Discriminator or resource type for this payload.
            pickupAddressId:
              type: string
              minLength: 1
              maxLength: 64
              description: Pickup address ID selected for shipment arrangement.
            pickupDate:
              type: string
              pattern: ^\d{4}-\d{2}-\d{2}$
              maxLength: 10
              description: Pickup date in YYYY-MM-DD format.
          required:
            - type
            - pickupAddressId
            - pickupDate
        - type: object
          additionalProperties: false
          properties:
            type:
              type: string
              enum:
                - dropoff
              description: Discriminator or resource type for this payload.
            dropoffBranchId:
              type: string
              maxLength: 64
              description: Drop-off branch ID, when a branch is selected.
          required:
            - type
      discriminator:
        propertyName: type
    OrderBulkShipItemRequest:
      type: object
      additionalProperties: false
      description: An order shipment instruction included in a bulk ship request.
      properties:
        orderId:
          type: string
          minLength: 1
          description: Order ID associated with this value.
        trackingNumber:
          type: string
          minLength: 1
          description: Partner-provided tracking number.
        trackingCompany:
          type: string
          minLength: 1
          description: Partner-provided tracking company name.
        items:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/OrderItemQuantityRequest"
          description: Items associated with this request, response, or event.
        expectedStatus:
          type: string
          enum:
            - PENDING
            - PAID
            - READY_TO_SHIP
            - SHIPPED
            - DELIVERED
            - CANCELLED
          description: Optional compare-and-swap guard. When supplied, the transition only applies if the order is still in this status. PENDING, PAID, and READY_TO_SHIP are treated as the same pre-shipment state for this guard.
      required:
        - orderId
        - trackingNumber
        - trackingCompany
        - items
    OrderBulkShipRequest:
      type: object
      additionalProperties: false
      properties:
        orders:
          type: array
          minItems: 1
          maxItems: 1000
          items:
            $ref: "#/components/schemas/OrderBulkShipItemRequest"
          description: Orders values.
      required:
        - orders
    OrderBulkCancelItemRequest:
      type: object
      additionalProperties: false
      description: An order cancellation instruction included in a bulk cancel request.
      properties:
        orderId:
          type: string
          minLength: 1
          description: Order ID associated with this value.
        expectedStatus:
          type: string
          enum:
            - PENDING
            - PAID
            - READY_TO_SHIP
            - SHIPPED
            - DELIVERED
            - CANCELLED
          description: Optional compare-and-swap guard. When supplied, the transition only applies if the order is still in this status. PENDING, PAID, and READY_TO_SHIP are treated as the same pre-shipment state for this guard.
      required:
        - orderId
    OrderBulkCancelRequest:
      type: object
      additionalProperties: false
      properties:
        orders:
          type: array
          minItems: 1
          maxItems: 1000
          items:
            $ref: "#/components/schemas/OrderBulkCancelItemRequest"
          description: Orders values.
      required:
        - orders
    InventoryUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        quantity:
          type: integer
          minimum: 0
          maximum: 1000000000
          description: Quantity of units.
        expectedQuantity:
          type: integer
          minimum: 0
          maximum: 1000000000
          description: Required compare-and-swap guard. The update only applies if current stock matches this value.
      required:
        - quantity
        - expectedQuantity
    InventoryBulkUpdateItemRequest:
      type: object
      additionalProperties: false
      description: An inventory quantity update included in a bulk inventory request.
      properties:
        id:
          type: string
          minLength: 1
          description: Unique identifier for this resource.
        quantity:
          type: integer
          minimum: 0
          maximum: 1000000000
          description: Quantity of units.
        expectedQuantity:
          type: integer
          minimum: 0
          maximum: 1000000000
          description: Required compare-and-swap guard. This item update only applies if current stock matches this value.
      required:
        - id
        - quantity
        - expectedQuantity
    InventoryBulkUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        items:
          type: array
          minItems: 1
          maxItems: 5000
          items:
            $ref: "#/components/schemas/InventoryBulkUpdateItemRequest"
          description: Items associated with this request, response, or event.
      required:
        - items
    InventoryItem:
      type: object
      additionalProperties: false
      description: Seller-owned inventory item returned by Inventory endpoints.
      properties:
        id:
          type: string
          description: Inventory item identifier.
          example: prod_openapi_inventory
        sku:
          type: string
          description: Seller SKU for the inventory item.
          example: OPENAPI-INVENTORY-SKU
        quantity:
          type: integer
          description: Current available inventory quantity.
          example: 8
        sellerId:
          type: string
          description: Seller identifier that owns the inventory item.
          example: seller-openapi-response-contract
        title:
          type: string
          description: Product title associated with the inventory item when available.
          example: OpenAPI Inventory Product
        reserved_quantity:
          type: integer
          description: Inventory quantity reserved for open orders.
          example: 1
        incoming_quantity:
          type: integer
          description: Inventory quantity expected from inbound stock.
          example: 3
        variantId:
          type: string
          description: Product variant identifier associated with the inventory item when available.
          example: var_openapi_inventory
        created_at:
          type: string
          format: date-time
          description: Inventory item creation timestamp in ISO-8601 format.
          example: 2026-08-25T12:00:00.000Z
        updated_at:
          type: string
          format: date-time
          description: Inventory item update timestamp in ISO-8601 format.
          example: 2026-08-25T12:05:00.000Z
      required:
        - id
        - sku
        - quantity
    InventoryItemResponse:
      type: object
      additionalProperties: false
      description: Single inventory item response envelope.
      example:
        success: true
        data:
          id: prod_openapi_inventory
          sku: OPENAPI-INVENTORY-SKU
          quantity: 12
          sellerId: seller-openapi-response-contract
      properties:
        success:
          type: boolean
          description: Whether the inventory item request succeeded.
          example: true
        data:
          description: Updated inventory item data.
          $ref: "#/components/schemas/InventoryItem"
      required:
        - success
        - data
    InventoryItemListResponse:
      type: object
      additionalProperties: false
      description: Paginated inventory item list response envelope.
      example:
        success: true
        data:
          - id: prod_openapi_inventory
            sku: OPENAPI-INVENTORY-SKU
            quantity: 8
            sellerId: seller-openapi-response-contract
            created_at: 2026-08-25T12:00:00.000Z
        meta:
          page: 1
          limit: 10
          total: 1
      properties:
        success:
          type: boolean
          description: Whether the inventory list request succeeded.
          example: true
        data:
          type: array
          description: Inventory items owned by the authenticated seller.
          items:
            $ref: "#/components/schemas/InventoryItem"
        meta:
          description: Pagination metadata for the inventory list.
          $ref: "#/components/schemas/PaginationMeta"
      required:
        - success
        - data
        - meta
    InventoryBulkUpdateError:
      type: object
      additionalProperties: false
      description: Per-item inventory update failure in a synchronous bulk update response.
      properties:
        id:
          type: string
          description: Inventory item identifier from the failed update request.
          example: prod_openapi_inventory_stale
        message:
          type: string
          description: Failure reason returned for this inventory item update.
          example: Inventory quantity changed before update
      required:
        - id
        - message
    InventoryBulkUpdateSummary:
      type: object
      additionalProperties: false
      description: Synchronous bulk inventory update result counts.
      properties:
        total:
          type: integer
          description: Number of inventory updates submitted in the request.
          example: 2
        succeeded:
          type: integer
          description: Number of inventory updates that succeeded.
          example: 1
        failed:
          type: integer
          description: Number of inventory updates that failed.
          example: 1
      required:
        - total
        - succeeded
        - failed
    InventoryBulkUpdateData:
      type: object
      additionalProperties: false
      description: Synchronous bulk inventory update response data.
      properties:
        updated:
          type: array
          description: Inventory items successfully updated by the synchronous bulk request.
          items:
            $ref: "#/components/schemas/InventoryItem"
        errors:
          type: array
          description: Per-item failures returned by the synchronous bulk request.
          items:
            $ref: "#/components/schemas/InventoryBulkUpdateError"
        summary:
          description: Aggregate result counts for the synchronous bulk request.
          $ref: "#/components/schemas/InventoryBulkUpdateSummary"
      required:
        - updated
        - errors
        - summary
    InventoryBulkUpdateResponse:
      type: object
      additionalProperties: false
      description: Synchronous bulk inventory update response envelope.
      example:
        success: true
        data:
          updated:
            - id: prod_openapi_inventory
              sku: OPENAPI-INVENTORY-SKU
              quantity: 12
              sellerId: seller-openapi-response-contract
          errors:
            - id: prod_openapi_inventory_stale
              message: Inventory quantity changed before update
          summary:
            total: 2
            succeeded: 1
            failed: 1
      properties:
        success:
          type: boolean
          description: Whether the synchronous bulk inventory request completed.
          example: true
        data:
          description: Synchronous bulk inventory update results.
          $ref: "#/components/schemas/InventoryBulkUpdateData"
      required:
        - success
        - data
    FulfillmentItemRequest:
      type: object
      additionalProperties: false
      description: A fulfillment line item and quantity to fulfill.
      properties:
        itemId:
          type: string
          maxLength: 64
          description: Line item ID.
        quantity:
          type: integer
          minimum: 1
          maximum: 1000000
          description: Quantity of units.
      required:
        - itemId
        - quantity
    FulfillmentCreateRequest:
      type: object
      additionalProperties: false
      properties:
        orderId:
          type: string
          minLength: 1
          maxLength: 64
          description: Order ID associated with this value.
        items:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/FulfillmentItemRequest"
          description: Items associated with this request, response, or event.
        trackingNumber:
          type: string
          maxLength: 120
          description: Partner-provided tracking number.
        trackingCompany:
          type: string
          maxLength: 80
          description: Partner-provided tracking company name.
      required:
        - orderId
        - items
    FulfillmentUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        status:
          type: string
          enum:
            - pending
            - shipped
            - delivered
            - cancelled
          description: Current status for this resource or workflow.
        trackingNumber:
          type: string
          maxLength: 120
          description: Partner-provided tracking number.
        trackingCompany:
          type: string
          maxLength: 80
          description: Partner-provided tracking company name.
        expectedStatus:
          type: string
          enum:
            - pending
            - shipped
            - delivered
            - cancelled
          description: Optional optimistic-locking guard. When supplied, the update is rejected with 409 if the fulfillment status changed before the write was applied.
    ReturnItemRequest:
      type: object
      additionalProperties: false
      description: A return line item, quantity, and optional item-level reason.
      properties:
        itemId:
          type: string
          maxLength: 64
          description: Line item ID.
        quantity:
          type: integer
          minimum: 1
          maximum: 1000000
          description: Quantity of units.
        reason:
          type: string
          maxLength: 500
          description: Reason provided for the request or status.
      required:
        - itemId
        - quantity
    ReturnCreateRequest:
      type: object
      additionalProperties: false
      properties:
        orderId:
          type: string
          minLength: 1
          maxLength: 64
          description: Order ID associated with this value.
        items:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: "#/components/schemas/ReturnItemRequest"
          description: Items associated with this request, response, or event.
        reason:
          type: string
          minLength: 1
          maxLength: 500
          description: Reason provided for the request or status.
      required:
        - orderId
        - items
        - reason
    ReturnRejectRequest:
      type: object
      additionalProperties: false
      properties:
        reason:
          type: string
          minLength: 1
          maxLength: 500
          description: Reason provided for the request or status.
      required:
        - reason
    ReturnDisputeAttachment:
      type: object
      additionalProperties: false
      description: Evidence attachment submitted with a return dispute.
      properties:
        url:
          type: string
          format: uri
          pattern: ^https://
          maxLength: 2048
          description: Public HTTPS URL for this attachment.
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Partner-visible name.
        size:
          type: integer
          minimum: 1
          description: Attachment size in bytes.
        mime:
          type: string
          enum:
            - image/jpeg
            - image/png
            - video/mp4
            - video/quicktime
          description: Attachment MIME type.
        durationSeconds:
          type: number
          minimum: 0
          description: Video duration in seconds.
      required:
        - url
        - name
        - size
        - mime
    ReturnDisputeRequest:
      type: object
      additionalProperties: false
      properties:
        reasonCode:
          type: string
          minLength: 1
          maxLength: 100
          enum:
            - did_not_receive_return_parcel
            - received_physical_damage
            - received_incomplete
            - received_wrong_product
            - received_used_product
            - buyer_claim_incorrect
          description: Machine-readable return dispute reason code.
        note:
          type: string
          minLength: 1
          maxLength: 2000
          description: Seller-provided note for the dispute.
        attachments:
          type: array
          minItems: 1
          maxItems: 6
          items:
            $ref: "#/components/schemas/ReturnDisputeAttachment"
          description: Evidence attachments for the dispute.
      required:
        - reasonCode
        - note
        - attachments
    ReturnItem:
      type: object
      additionalProperties: false
      description: A returned line item projected by the public return DTO.
      properties:
        itemId:
          type: string
          description: Line-item identifier from the order being returned.
          example: "100000001"
        quantity:
          type: integer
          description: Number of units for this line item included in the return.
          example: 1
        reason:
          type: string
          description: Optional item-level return reason supplied for this line item.
          example: Damaged
      required:
        - itemId
        - quantity
    Return:
      type: object
      additionalProperties: false
      description: A return case detail response projected by the Open API return DTO.
      properties:
        id:
          type: string
          description: Stable return case identifier.
          example: ret_openapi_schema_example
        orderId:
          type: string
          description: Order identifier associated with the return case.
          example: ORD-SAMPLE-001
        status:
          type: string
          description: Current return workflow status as returned by the upstream return source.
          example: requested
        reason:
          type: string
          description: Return reason recorded on the case.
          example: Item received damaged - cracked screen
        items:
          type: array
          description: Line items included in the return.
          items:
            $ref: "#/components/schemas/ReturnItem"
        refundAmount:
          type: integer
          description: Integer amount in PHP centavos.
          example: 129900
        sellerId:
          type: string
          description: Seller identifier that owns the return case. Omitted when upstream data does not expose it.
          example: seller-openapi-response-contract
        rejection_reason:
          type: string
          description: Reason recorded when the return is rejected. Omitted unless the return has been rejected.
          example: Item was already used, no longer eligible for return
        dispute_reason_code:
          type: string
          enum:
            - did_not_receive_return_parcel
            - received_physical_damage
            - received_incomplete
            - received_wrong_product
            - received_used_product
            - buyer_claim_incorrect
          description: Structured dispute reason code. Omitted unless the seller has filed a dispute.
          example: received_wrong_product
        dispute_note:
          type: string
          description: Seller dispute note explaining the dispute. Omitted unless the seller has filed a dispute.
          example: The parcel contained a different item from the approved return.
        dispute_evidence:
          type: array
          description: HTTPS evidence URLs submitted with a dispute. Omitted when no dispute evidence was supplied.
          items:
            type: string
            description: HTTPS URL for one dispute evidence attachment.
            example: https://example.com/evidence/return-photo.jpg
        created_at:
          type: string
          format: date-time
          description: ISO-8601 timestamp when the return case was created.
          example: 2026-08-26T10:00:00.000Z
        updated_at:
          type: string
          format: date-time
          description: ISO-8601 timestamp when the return case was last updated.
          example: 2026-08-26T10:05:00.000Z
        dispute_window_deadline:
          type: string
          format: date-time
          description: ISO-8601 deadline by which the seller may still dispute the return case. Omitted when no dispute window is modelled.
          example: 2026-08-29T10:00:00.000Z
        buyer_evidence_urls:
          type: array
          description: Buyer-submitted evidence URLs. Omitted when the buyer provided no evidence.
          items:
            type: string
            description: URL for one buyer-submitted evidence attachment.
            example: https://example.com/evidence/buyer-photo.jpg
        response_window_deadline:
          type: string
          format: date-time
          description: ISO-8601 seller response-window deadline. Omitted when the Open API return DTO receives no string deadline from upstream.
          example: 2026-08-27T10:00:00.000Z
      required:
        - id
        - orderId
        - status
        - reason
        - items
    ReturnResponse:
      type: object
      additionalProperties: false
      description: Single return response envelope.
      example:
        success: true
        data:
          id: ret_SqS5eJgMmQ67
          orderId: ORD-SAMPLE-001
          status: requested
          reason: Item received damaged - cracked screen
          items:
            - itemId: "100000001"
              quantity: 1
              reason: Damaged
          refundAmount: 129900
          sellerId: seller-openapi-response-contract
          created_at: 2026-08-26T03:21:10.025Z
          updated_at: 2026-08-26T03:21:10.025Z
      properties:
        success:
          type: boolean
          description: Whether the return request succeeded.
          example: true
        data:
          $ref: "#/components/schemas/Return"
          description: Return case detail.
      required:
        - success
        - data
    ReturnCase:
      type: object
      additionalProperties: false
      description: A return case row in the unified after-sales case list.
      properties:
        case_id:
          type: string
          description: Return case identifier used to fetch or act on the case.
          example: ret_openapi_schema_example
        type:
          type: string
          enum:
            - return_refund
            - cancellation
            - failed_delivery
          description: Partner-facing case type for the after-sales flow.
          example: return_refund
        order_id:
          type: string
          description: Order identifier associated with the case.
          example: ORD-SAMPLE-001
        status:
          type: string
          enum:
            - pending
            - approved
            - disputed
            - resolved
          description: Partner-facing case status mapped from the upstream return workflow.
          example: pending
        created_at:
          type: string
          format: date-time
          description: ISO-8601 timestamp when the case was created. Omitted when upstream data does not provide it.
          example: 2026-08-26T10:00:00.000Z
      required:
        - case_id
        - type
        - order_id
        - status
    ReturnCaseListResponse:
      type: object
      additionalProperties: false
      description: Paginated return case list response envelope.
      example:
        success: true
        data:
          - case_id: ret_SqS5eJgMmQ67
            type: return_refund
            order_id: ORD-SAMPLE-001
            status: pending
            created_at: 2026-08-26T03:21:10.025Z
        meta:
          page: 1
          limit: 1
          total: 1
      properties:
        success:
          type: boolean
          description: Whether the return case list request succeeded.
          example: true
        data:
          type: array
          description: Return cases visible to the authenticated seller token.
          items:
            $ref: "#/components/schemas/ReturnCase"
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
        note:
          type: string
          description: Wrapper-level note explaining that cancellation or failed_delivery case lists are empty because those types have no upstream source yet.
          example: cancellation cases are not yet backed by an upstream source; the list is empty.
      required:
        - success
        - data
        - meta
    DisputeReasonCode:
      type: object
      additionalProperties: false
      description: A structured reason code that can be used when disputing a return.
      properties:
        code_id:
          type: string
          description: Stable identifier for this dispute reason code.
          example: received_wrong_product
        code:
          type: string
          enum:
            - did_not_receive_return_parcel
            - received_physical_damage
            - received_incomplete
            - received_wrong_product
            - received_used_product
            - buyer_claim_incorrect
          description: Machine-readable dispute reason code accepted by the dispute endpoint.
          example: received_wrong_product
        label:
          type: string
          description: Human-readable label for the dispute reason.
          example: Received wrong product
        description:
          type: string
          description: Partner-facing explanation of when this dispute reason applies.
          example: The returned parcel contains the wrong product.
      required:
        - code_id
        - code
        - label
        - description
    DisputeReasonListResponse:
      type: object
      additionalProperties: false
      description: Dispute reason reference-data response envelope.
      example:
        success: true
        data:
          - code_id: received_wrong_product
            code: received_wrong_product
            label: Received wrong product
            description: The returned parcel contains the wrong product.
      properties:
        success:
          type: boolean
          description: Whether the dispute reason list request succeeded.
          example: true
        data:
          type: array
          description: Dispute reason codes currently accepted by the return dispute endpoint.
          items:
            $ref: "#/components/schemas/DisputeReasonCode"
      required:
        - success
        - data
    TokenData:
      type: object
      additionalProperties: false
      properties:
        access_token:
          type: string
          description: Seller-scoped access token.
        refresh_token:
          type: string
          description: Single-use refresh token. Rotated on every refresh.
        expires_in:
          type: integer
          description: Access-token TTL in seconds.
          example: 14400
        expires_at:
          type: string
          format: date-time
          description: Absolute access-token expiry timestamp in ISO-8601 UTC.
          example: 2026-07-16T10:30:00.000Z
        seller_id:
          type: string
          description: Seller the token acts on.
        seller_name:
          type: string
          nullable: true
          description: Display name of the seller.
        scopes:
          type: array
          items:
            type: string
          description: OAuth scopes requested or granted.
      required:
        - access_token
        - refresh_token
        - expires_in
        - expires_at
        - seller_id
        - scopes
    TokenResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/TokenData"
          description: Response or event payload for this schema.
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    RefreshTokenData:
      type: object
      additionalProperties: false
      properties:
        access_token:
          type: string
          description: New seller-scoped access token.
        refresh_token:
          type: string
          description: New single-use refresh token.
        expires_in:
          type: integer
          description: Access-token TTL in seconds.
          example: 14400
        expires_at:
          type: string
          format: date-time
          description: Absolute access-token expiry timestamp in ISO-8601 UTC.
          example: 2026-07-16T10:30:00.000Z
      required:
        - access_token
        - refresh_token
        - expires_in
        - expires_at
    RefreshTokenResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/RefreshTokenData"
          description: Response or event payload for this schema.
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    SellerVerifyData:
      type: object
      additionalProperties: false
      description: OTP challenge details for a seller authorization session. This does not contain an authorization code or token.
      properties:
        phone_masked:
          type: string
          description: Masked phone number where the OTP was sent. Empty for sandbox-shop flows without a phone.
          example: +63900****000
        expires_in_seconds:
          type: integer
          description: Seconds until the seller authorization session and OTP challenge expire.
          example: 600
        resend_after_seconds:
          type: integer
          description: Minimum number of seconds the seller should wait before requesting another OTP.
          example: 60
        reference_code:
          type: string
          description: Optional OTP provider reference code shown to the seller when one is returned upstream.
          example: ABC123
      required:
        - phone_masked
        - expires_in_seconds
        - resend_after_seconds
      example:
        phone_masked: +63900****000
        expires_in_seconds: 600
        resend_after_seconds: 60
    SellerVerifyResponse:
      type: object
      additionalProperties: false
      properties:
        success:
          type: boolean
          enum:
            - true
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/SellerVerifyData"
          description: Response or event payload for this schema.
      required:
        - success
        - data
      example:
        success: true
        data:
          phone_masked: +63900****000
          expires_in_seconds: 600
          resend_after_seconds: 60
    SellerVerifyOtpData:
      type: object
      additionalProperties: false
      description: Seller identity confirmed for the current authorization session. Consent still must be submitted before an authorization code is minted.
      properties:
        seller_id:
          type: string
          description: Seller identifier that will be bound to the authorization after consent.
          example: seller_nike_ph
        seller_name:
          type: string
          description: Seller display name confirmed by the authorization session.
          example: Nike Philippines
      required:
        - seller_id
        - seller_name
      example:
        seller_id: seller_nike_ph
        seller_name: Nike Philippines
    SellerVerifyOtpResponse:
      type: object
      additionalProperties: false
      properties:
        success:
          type: boolean
          enum:
            - true
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/SellerVerifyOtpData"
          description: Response or event payload for this schema.
      required:
        - success
        - data
      example:
        success: true
        data:
          seller_id: seller_nike_ph
          seller_name: Nike Philippines
    SellerConsentData:
      type: object
      additionalProperties: false
      description: Authorization result returned after an OTP-verified seller grants consent. Exchange code via POST /auth/token.
      properties:
        code:
          type: string
          description: One-time authorization code for POST /auth/token. This is not an access token.
          example: V1StGXR8_Z5jdHi6B-myT7zM0oLkN2pQ
        seller_id:
          type: string
          description: Seller identifier authorized for the partner app.
          example: seller_nike_ph
        redirect_uri:
          type: string
          format: uri
          description: Registered redirect URI associated with the consent session.
          example: https://partner.example.com/callback
        state:
          type: string
          maxLength: 1024
          description: Opaque state originally supplied by the partner, returned unchanged when present.
          example: partner-generated-csrf-state
      required:
        - code
        - seller_id
        - redirect_uri
      example:
        code: V1StGXR8_Z5jdHi6B-myT7zM0oLkN2pQ
        seller_id: seller_nike_ph
        redirect_uri: https://partner.example.com/callback
        state: partner-generated-csrf-state
    SellerConsentResponse:
      type: object
      additionalProperties: false
      properties:
        success:
          type: boolean
          enum:
            - true
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/SellerConsentData"
          description: Response or event payload for this schema.
      required:
        - success
        - data
      example:
        success: true
        data:
          code: V1StGXR8_Z5jdHi6B-myT7zM0oLkN2pQ
          seller_id: seller_nike_ph
          redirect_uri: https://partner.example.com/callback
          state: partner-generated-csrf-state
    RevokeAuthorizationData:
      type: object
      additionalProperties: false
      properties:
        revoked:
          type: boolean
          description: True when an active authorization was revoked; false when there was no active grant to revoke. No affected-row count is exposed.
      required:
        - revoked
      example:
        revoked: true
    RevokeAuthorizationResponse:
      type: object
      additionalProperties: false
      properties:
        success:
          type: boolean
          enum:
            - true
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/RevokeAuthorizationData"
          description: Response or event payload for this schema.
      required:
        - success
        - data
      example:
        success: true
        data:
          revoked: true
    DenyAuthorizationData:
      type: object
      additionalProperties: false
      properties:
        redirect_uri:
          type: string
          format: uri
          description: Registered redirect URI validated for the denied authorization request.
          example: https://partner.example.com/callback
        state:
          type: string
          maxLength: 1024
          description: Opaque state supplied by the partner, returned unchanged when present.
          example: partner-generated-csrf-state
      required:
        - redirect_uri
      example:
        redirect_uri: https://partner.example.com/callback
        state: partner-generated-csrf-state
    DenyAuthorizationResponse:
      type: object
      additionalProperties: false
      properties:
        success:
          type: boolean
          enum:
            - true
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/DenyAuthorizationData"
          description: Response or event payload for this schema.
      required:
        - success
        - data
      example:
        success: true
        data:
          redirect_uri: https://partner.example.com/callback
          state: partner-generated-csrf-state
    BulkOperationResult:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: object
          properties:
            shipped:
              type: array
              items:
                type: object
                properties:
                  orderId:
                    type: string
                    description: Order ID associated with this value.
                  status:
                    type: string
                    description: Current status for this resource or workflow.
              description: Orders that were shipped successfully.
            errors:
              type: array
              items:
                type: object
                properties:
                  orderId:
                    type: string
                    description: Order ID associated with this value.
                  error:
                    type: string
                    description: Structured error payload returned when the request fails.
              description: Per-item errors returned by the bulk operation.
            summary:
              type: object
              properties:
                total:
                  type: integer
                  description: Total number of items in this summary.
                succeeded:
                  type: integer
                  description: Number of items that completed successfully.
                failed:
                  type: integer
                  description: Number of items that failed.
              description: Summary details.
          description: Response or event payload for this schema.
    FulfillmentItem:
      type: object
      additionalProperties: false
      description: A line item included in a fulfillment response.
      properties:
        itemId:
          type: string
          description: Line item ID.
        quantity:
          type: integer
          description: Quantity of units.
      required:
        - itemId
        - quantity
    FulfillmentMetadata:
      type: object
      additionalProperties: false
      description: Allowlisted metadata. Carrier-internal fields (mailno, bill_code, sortingcode, etc.) are NOT exposed.
      properties:
        tracking_number:
          type: string
          description: Shipment tracking number.
        tracking_company:
          type: string
          description: Shipment tracking company name.
    Fulfillment:
      type: object
      additionalProperties: false
      description: Partner-safe fulfillment view. Carrier-internal fields are stripped at the API boundary.
      properties:
        id:
          type: string
          description: Unique identifier for this resource.
        status:
          type: string
          enum:
            - pending
            - shipped
            - delivered
            - cancelled
          description: Current status for this resource or workflow.
        orderId:
          type: string
          description: Order ID associated with this value.
        trackingNumber:
          type: string
          description: Partner-provided tracking number.
        trackingCompany:
          type: string
          description: Partner-provided tracking company name.
        created_at:
          type: string
          format: date-time
          description: Created at as an ISO-8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: Updated at as an ISO-8601 timestamp.
        items:
          type: array
          items:
            $ref: "#/components/schemas/FulfillmentItem"
          description: Items associated with this request, response, or event.
        metadata:
          $ref: "#/components/schemas/FulfillmentMetadata"
          description: Allowlisted partner-visible metadata.
      required:
        - id
        - status
    FulfillmentResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/Fulfillment"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    FulfillmentListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: array
          items:
            $ref: "#/components/schemas/Fulfillment"
          description: Response or event payload for this schema.
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    OrderItem:
      type: object
      additionalProperties: false
      description: A partner-visible order line item.
      properties:
        id:
          type: string
          description: Line-item identifier, unique within the order.
        orderId:
          type: string
          description: Order the line item belongs to.
        productId:
          type: string
          description: Product the line item was created from.
        variantId:
          type: string
          description: Variant of the product that was ordered. Absent when the upstream record carries no variant.
        title:
          type: string
          description: Product title as it appeared on the order.
        sku:
          type: string
          description: Seller SKU of the ordered variant.
        quantity:
          type: integer
          description: Units ordered for this line.
        unitPrice:
          type: integer
          description: Integer amount in PHP centavos.
        totalPrice:
          type: integer
          description: Integer amount in PHP centavos.
        thumbnail:
          type: string
          description: Product thumbnail URL. Present only when the upstream record carries one.
    Address:
      type: object
      additionalProperties: false
      properties:
        name:
          type: string
          description: Partner-visible name.
        line1:
          type: string
          description: First line of the street address.
        line2:
          type: string
          description: Second line of the street address, when present.
        city:
          type: string
          description: PSGC-aligned Philippine city or municipality.
        province:
          type: string
          description: PSGC-aligned Philippine province.
        postalCode:
          type: string
          description: Postal code for the address.
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code.
        phone:
          type: string
          description: Contact phone number.
    Order:
      type: object
      additionalProperties: false
      description: Partner-safe order view. Internal status fields and carrier-internal metadata are stripped.
      properties:
        id:
          type: string
          description: Unique identifier for this resource.
        status:
          type: string
          enum:
            - READY_TO_SHIP
            - SHIPPED
            - DELIVERED
            - CANCELLED
            - RETURN_REFUND
          description: Current status for this resource or workflow.
        sellerId:
          type: string
          description: Seller ID associated with this value.
        customerId:
          type: string
          description: Customer ID associated with this order.
        buyerEmail:
          type: string
          format: email
          description: Buyer email address. Returned by GET /orders and GET /orders/{id} only, and only when the app holds the `customer:email:read` scope. Absent otherwise, and never present on webhook payloads.
        currency:
          type: string
          description: ISO currency code for monetary amounts.
        subtotal:
          type: integer
          description: Integer amount in PHP centavos.
        total:
          type: integer
          description: Integer amount in PHP centavos.
        tax:
          type: integer
          description: Integer amount in PHP centavos.
        shipping:
          type: integer
          description: Integer amount in PHP centavos.
        discount:
          type: integer
          description: Integer amount in PHP centavos.
        paymentStatus:
          type: string
          description: Current payment status for the order.
        fulfillmentStatus:
          type: string
          description: Current fulfillment status for the order.
        created_at:
          type: string
          format: date-time
          description: Created at as an ISO-8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: Updated at as an ISO-8601 timestamp.
        items:
          type: array
          items:
            $ref: "#/components/schemas/OrderItem"
          description: Items associated with this request, response, or event.
        fulfillments:
          type: array
          items:
            $ref: "#/components/schemas/Fulfillment"
          description: Fulfillments values.
        shippingAddress:
          $ref: "#/components/schemas/Address"
          description: Shipping address details.
        billingAddress:
          $ref: "#/components/schemas/Address"
          description: Billing address details.
        shipByDate:
          type: string
          format: date-time
          nullable: true
          description: Ship-by SLA deadline (ISO-8601), or null when the order has no SBD. Matches the deadline shown in Seller Center.
        slaBreached:
          type: boolean
          description: True when the order is unshipped and past its shipByDate. Present only when a deadline exists; false once the order has shipped (SLA no longer applicable).
        shippingChannel:
          type: string
          description: The forward logistics channel code the order ships via (e.g. "STANDARD_COURIER"), sourced from the order's selected channel. A routing key for WMS integration. Omitted when no channel has been assigned yet.
        bookingStatus:
          type: string
          enum:
            - PENDING_ARRANGE
            - READY_FOR_HANDOVER
          description: Pre-shipment booking state. PENDING_ARRANGE means paid but unbooked; READY_FOR_HANDOVER means booking arranged and awaiting courier pickup. Omitted after courier handover progresses beyond the pre-shipment booking window.
      required:
        - id
        - status
    OrderResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/Order"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    OrderListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: array
          items:
            $ref: "#/components/schemas/Order"
          description: Response or event payload for this schema.
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    EligiblePickupDatesResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: object
          properties:
            dates:
              type: array
              description: ISO date strings (YYYY-MM-DD) the seller may select for pickup, Asia/Manila.
              items:
                type: string
                example: 2026-07-06
            cutoffTime:
              type: string
              description: Same-day cutoff (HH:mm, Asia/Manila) after which pickup moves to the next business day.
              example: 17:00
            shipByDate:
              type: string
              nullable: true
              description: The order Ship-By-Date ceiling (ISO date). null when the order has no SBD.
              example: 2026-07-12
            allowPickupOnNonWorkingDays:
              type: boolean
              description: Whether pickups are permitted on non-working days (Sundays/holidays).
              example: false
            holidayCalendarStatus:
              type: string
              enum:
                - ok
                - unavailable
              description: "'unavailable' when the holiday calendar couldn't be loaded (dates fall back to weekday-only rules)."
          required:
            - dates
          description: Response or event payload for this schema.
      required:
        - success
        - data
    PickupSlotResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/PickupSlot"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    PickupSlot:
      type: object
      additionalProperties: false
      description: Per-day pickup availability for a single date. Rule-based (cutoff/holiday/working-days, Asia/Manila); does not query the carrier in real time.
      properties:
        date:
          type: string
          format: date
          description: The validated pickup date (YYYY-MM-DD).
          example: 2026-07-10
        available:
          type: boolean
          description: Whether pickup is available on this date. A false value is NOT an error — partners should select another date.
          example: true
        reason:
          type: string
          description: Present only when available is false — the rule that disqualifies the date.
          example: Pickup is not available on this day
        cutoffTime:
          type: string
          description: Same-day cutoff (HH:mm, Asia/Manila) the date was validated against.
          example: 17:00
        timeWindow:
          type: object
          description: Default pickup window the partner should pre-fill when booking collection (the carrier has no slot lookup; the caller supplies the window).
          properties:
            start:
              type: string
              example: 09:00
              description: Start time in HH:mm format.
            end:
              type: string
              example: 18:00
              description: End time in HH:mm format.
          required:
            - start
            - end
      required:
        - date
        - available
    ShipmentArrangementResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/ShipmentArrangement"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ShipmentArrangement:
      type: object
      additionalProperties: false
      description: Result of arranging a shipment (pickup or dropoff). Carries the carrier tracking number plus the type-specific booking metadata. Carrier-internal pickup_rules and provider environment trace details are dropped at the DTO boundary.
      properties:
        shipment_type:
          type: string
          enum:
            - pickup
            - dropoff
          description: The arrangement type that was booked.
          example: pickup
        order_id:
          type: string
          example: ord_01ABC
          description: Order ID associated with this value.
        tracking_number:
          type: string
          description: Carrier tracking number.
          example: TRK1234567890
        tracking_url:
          type: string
          nullable: true
          description: Carrier tracking URL (null when the upstream provider does not return one).
        booking_confirmation:
          type: object
          properties:
            status:
              type: string
              enum:
                - confirmed
              example: confirmed
              description: Current status for this resource or workflow.
            message:
              type: string
              example: Pickup arranged successfully.
              description: Human-readable message for this value.
            confirmed_at:
              type: string
              format: date-time
              description: ISO-8601 timestamp the booking was confirmed.
          required:
            - status
            - message
            - confirmed_at
          description: Booking confirmation details returned by the shipment arrangement.
        pickup_id:
          type: string
          description: Pickup-only. Internal pickup stamp (e.g. pickup_<waybill>).
        estimated_pickup_time:
          type: string
          nullable: true
          description: Pickup-only. Requested pickup date echoed by the upstream.
        branch:
          type: object
          nullable: true
          description: Dropoff-only. Selected branch information; null when branch information is not provided by the carrier.
          properties:
            id:
              type: string
              description: Unique identifier for this resource.
            name:
              type: string
              description: Partner-visible name.
            address:
              type: string
              description: Address value.
            operating_hours:
              type: string
              description: Operating hours value.
          required:
            - id
            - name
        drop_off_deadline:
          type: string
          nullable: true
          format: date-time
          description: Dropoff-only. 3-day drop-off window expiry. ISO-8601 timestamp.
      required:
        - shipment_type
        - order_id
        - tracking_number
        - tracking_url
        - booking_confirmation
    OrderTrackingResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/OrderTracking"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    OrderTracking:
      type: object
      additionalProperties: false
      description: Current tracking snapshot for an order's shipment. Carries the carrier tracking number, the current status, and the latest tracking event with timestamp + location. Carrier-internal metadata (raw_payload, lvl1_transition, raw_status_code) is dropped at the DTO boundary.
      properties:
        order_id:
          type: string
          example: ord_01ABC
          description: Order ID associated with this value.
        tracking_number:
          type: string
          description: Carrier tracking number.
          example: TRK1234567890
        current_status:
          type: string
          nullable: true
          description: Status of the most recent tracking_update event received from the carrier. null when no scan events have been received yet.
          example: shipped
        handover_status:
          type: string
          enum:
            - READY_FOR_HANDOVER
            - IN_TRANSIT
            - SHIPPED
            - DELIVERED
          description: Explicit shipment handover/progress state. READY_FOR_HANDOVER means the booking is arranged and the parcel is awaiting courier pickup.
          example: READY_FOR_HANDOVER
        latest_event:
          nullable: true
          description: The most recent carrier tracking event (timestamp + location + status + description). null when no tracking events have been received.
          allOf:
            - $ref: "#/components/schemas/TrackingEvent"
      required:
        - order_id
        - tracking_number
        - current_status
        - latest_event
    TrackingEvent:
      type: object
      additionalProperties: false
      description: A single carrier tracking scan. Only partner-facing fields are surfaced; carrier-internal metadata is dropped.
      properties:
        timestamp:
          type: string
          format: date-time
          description: ISO-8601 timestamp of the scan.
          example: 2026-07-10T08:30:00.000Z
        location:
          type: string
          description: Sanitized scan location (city/province or hub label). May be empty.
          example: MNL Gateway
        status:
          type: string
          description: Resolved tracking status code at the time of the scan.
          example: shipped
        description:
          type: string
          description: Human-readable description of the scan event.
          example: Parcel picked up by carrier.
      required:
        - timestamp
        - location
        - status
        - description
    ShippingLabelResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/ShippingLabel"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ShippingLabel:
      type: object
      additionalProperties: false
      description: Print-ready AWB / shipping label for an order's shipment. Carries the carrier tracking number the label was generated for, the label format (pdf_base64 | url | html), and the format-appropriate payload. Only available after shipment has been successfully arranged (422 SHIPPING_LABEL_UNAVAILABLE otherwise).
      properties:
        order_id:
          type: string
          example: ord_01ABC
          description: Order ID associated with this value.
        format:
          type: string
          enum:
            - pdf_base64
            - url
            - html
          description: "How `data` should be interpreted: pdf_base64 = base64-encoded PDF bytes (decode + pipe to the warehouse printer); url = a pre-signed URL the printer fetches directly; html = inline HTML label."
        data:
          type: string
          description: "Format-appropriate label payload: base64 PDF bytes, a pre-signed URL, or inline HTML. For pdf_base64, decode with a standard base64 decoder before writing to disk / printer."
        tracking_number:
          type: string
          description: Carrier tracking number the label was generated for.
          example: TRK1234567890
        provider:
          type: string
          description: Logistics provider identifier (e.g. standard_carrier).
          example: standard_carrier
      required:
        - order_id
        - format
        - data
        - tracking_number
        - provider
    PickupAddressListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: array
          description: Pickup addresses registered for the authenticated shop.
          items:
            $ref: "#/components/schemas/PickupAddress"
      required:
        - success
        - data
    PickupAddress:
      type: object
      additionalProperties: false
      description: A pickup address registered for the shop.
      properties:
        address_id:
          type: string
          example: addr_01
          description: Pickup address ID.
        name:
          type: string
          description: Human-readable label (full_name upstream).
          example: Makati Main Warehouse
        phone:
          type: string
          example: +63 2 8888 1234
          description: Contact phone number.
        region:
          type: string
          example: Metro Manila
          description: PSGC-aligned Philippine region.
        province:
          type: string
          example: Metro Manila
          description: PSGC-aligned Philippine province.
        city:
          type: string
          example: Makati
          description: PSGC-aligned Philippine city or municipality.
        barangay:
          type: string
          example: Bel-Air
          description: PSGC-aligned Philippine barangay.
        postal_code:
          type: string
          example: "1209"
          description: Postal code for the address.
        detailed_address:
          type: string
          example: 2nd Floor, Bel-Air Tower, 60 Jupiter St
          description: Detailed street address.
        is_default:
          type: boolean
          description: Whether this is the default pickup address.
          example: true
        pickup_eligible:
          type: boolean
          description: Always true on this endpoint — the list is pre-filtered to pickup addresses.
          example: true
        dropoff_eligible:
          type: boolean
          description: Whether the address also accepts returned goods (is_return_address upstream).
          example: true
      required:
        - address_id
        - pickup_eligible
        - dropoff_eligible
    ShippingChannelListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: array
          description: Shipping channels enabled for the authenticated shop.
          items:
            $ref: "#/components/schemas/ShippingChannel"
      required:
        - success
        - data
    ShippingChannel:
      type: object
      additionalProperties: false
      description: A shipping channel enabled for the shop.
      properties:
        channel_id:
          type: string
          description: Platform-stable channel code (e.g. STANDARD).
          example: STANDARD
        name:
          type: string
          description: Human-readable channel name.
          example: Standard Courier
        enabled:
          type: boolean
          description: Always true on this endpoint — the list is pre-filtered to enabled channels.
          example: true
      required:
        - channel_id
        - name
        - enabled
    ShippingOptionListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: array
          description: Active platform logistics options with package-level quote status.
          items:
            $ref: "#/components/schemas/ShippingOption"
      required:
        - success
        - data
    ShippingOption:
      type: object
      additionalProperties: false
      description: A shipping option. priceAmount is PHP centavos when quoted and null when unavailable.
      properties:
        id:
          type: string
          example: ship_standard
          description: Unique identifier for this resource.
        name:
          type: string
          example: Standard Delivery
          description: Partner-visible name.
        provider:
          type: string
          example: Standard Courier
          description: Logistics provider identifier.
        priceAmount:
          type: integer
          nullable: true
          description: Integer amount in PHP centavos.
        currency:
          type: string
          example: PHP
          description: ISO currency code for monetary amounts.
        estimatedDays:
          type: string
          example: 3-5 business days
          description: Estimated delivery time range.
        rateStatus:
          type: string
          enum:
            - quoted
            - unavailable
          description: Quote availability status.
        rateUnavailableReason:
          type: string
          description: Machine-readable reason when rateStatus=unavailable.
        description:
          type: string
          description: Human-readable description.
      required:
        - id
        - name
        - provider
        - priceAmount
        - currency
        - estimatedDays
        - rateStatus
    VariantPrice:
      type: object
      additionalProperties: false
      description: Per-variant catalogue pricing for external price mapping.
      properties:
        variant_id:
          type: string
          description: Variant identifier the price belongs to.
        sku:
          type: string
          description: Seller SKU of the variant.
        original_price:
          type: integer
          description: Base catalogue price in integer centavos. Always present.
        sale_price:
          type: integer
          description: Promotional override in integer centavos. Present only when a price list exists alongside the base price.
      required:
        - variant_id
        - sku
        - original_price
    VariantPriceListResponse:
      type: object
      example:
        success: true
        data:
          - variant_id: prod_OP96TBIVxmBI_v1
            sku: NIKE-AF1-42
            original_price: 549900
      description: Per-variant prices for one product.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the price lookup succeeded.
        data:
          type: array
          description: One entry per variant of the requested product.
          items:
            $ref: "#/components/schemas/VariantPrice"
      required:
        - success
        - data
    VariantPriceUpdate:
      type: object
      additionalProperties: false
      description: Confirmation of one applied variant price change.
      properties:
        variant_id:
          type: string
          description: Variant whose price was updated.
        new_price:
          type: integer
          description: Integer amount in PHP centavos.
      required:
        - variant_id
        - new_price
    VariantPriceUpdateResponse:
      type: object
      example:
        success: true
        data:
          - variant_id: prod_eb-qe4ug93fc_v1
            new_price: 499900
      description: Applied variant price changes, echoed back per variant.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the batch price update succeeded.
        data:
          type: array
          description: One entry per variant the request updated.
          items:
            $ref: "#/components/schemas/VariantPriceUpdate"
      required:
        - success
        - data
    VariantStockUpdate:
      type: object
      additionalProperties: false
      description: Confirmation of one applied variant stock change.
      properties:
        variant_id:
          type: string
          description: Variant whose stock was set.
        stock_quantity:
          type: integer
          description: Stock level now in effect for the variant.
      required:
        - variant_id
        - stock_quantity
    VariantStockUpdateResponse:
      type: object
      example:
        success: true
        data:
          items:
            - variant_id: prod_0Q4bua7uA5PJ_v1
              stock_quantity: 25
      description: Applied variant stock levels for one product.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the stock update succeeded.
        data:
          type: object
          additionalProperties: false
          properties:
            items:
              type: array
              description: One entry per variant the request updated.
              items:
                $ref: "#/components/schemas/VariantStockUpdate"
          required:
            - items
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ProductBulkCreateError:
      type: object
      additionalProperties: false
      description: One rejected entry from a bulk create, addressed by its position in the request.
      properties:
        index:
          type: integer
          description: Zero-based position of the rejected product in the submitted products array.
        message:
          type: string
          description: Why this entry was rejected.
      required:
        - index
        - message
    ProductBulkCreateResponse:
      type: object
      example:
        success: true
        data:
          created:
            - product_id: prod_sQHXbsxX8EQ8
              name: Air Force 1 Mid
              status: proposed
              sku: NIKE-AF1-MID-42
              price: 599900
              stock: 10
              category: Electronics
              created_at: 2026-08-26T04:33:49.300Z
              updated_at: 2026-08-26T04:33:49.300Z
          errors: []
          summary:
            total: 1
            succeeded: 1
            failed: 0
      description: "Synchronous bulk-create outcome. Partial success is normal: read errors even when some products were created. Batches submitted for asynchronous processing answer 202 with a job handle instead of this body."
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the bulk request was processed.
        data:
          type: object
          additionalProperties: false
          properties:
            created:
              type: array
              description: Products that were created, in submission order.
              items:
                $ref: "#/components/schemas/Product"
            errors:
              type: array
              description: Entries that were rejected. Empty when every product was created.
              items:
                $ref: "#/components/schemas/ProductBulkCreateError"
            summary:
              type: object
              additionalProperties: false
              description: Counts for the submitted batch.
              properties:
                total:
                  type: integer
                  description: Total number of items in this summary.
                succeeded:
                  type: integer
                  description: Number of items that completed successfully.
                failed:
                  type: integer
                  description: Number of items that failed.
              required:
                - total
                - succeeded
                - failed
          required:
            - created
            - errors
            - summary
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ProductStatusUpdateResponse:
      type: object
      example:
        success: true
        data:
          id: prod_uzikp4otJwDq
          status: live
      description: The status now in effect for the product, echoed back verbatim.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the status change was applied.
        data:
          type: object
          additionalProperties: false
          properties:
            id:
              type: string
              description: Product whose status changed.
            status:
              type: string
              enum:
                - live
                - unlisted
                - delisted
                - proposed
                - under_review
                - archived
              description: Status now in effect. The platform echoes what was applied, never a substitute.
          required:
            - id
            - status
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ProductDeleteResponse:
      type: object
      example:
        success: true
        data:
          id: prod_Df3oBRhaGyNP
          deleted: true
      description: Confirmation that the product was deleted.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the delete succeeded.
        data:
          type: object
          additionalProperties: false
          properties:
            id:
              type: string
              description: Product that was deleted.
            deleted:
              type: boolean
              enum:
                - true
              description: Always true on a successful delete.
          required:
            - id
            - deleted
          description: Response or event payload for this schema.
      required:
        - success
        - data
    OrderItemListResponse:
      type: object
      example:
        success: true
        data:
          - id: item_CHMTF2ON9QK3VJ_0
            orderId: CHMTF2ON9QK3VJ
            productId: prod_048222330
            title: Bamboo Cutting Board Set
            sku: HOME-4001
            quantity: 2
            unitPrice: 59900
            totalPrice: 119800
          - id: item_CHMTF2ON9QK3VJ_1
            orderId: CHMTF2ON9QK3VJ
            productId: prod_839692237
            title: Premium Leather Wallet
            sku: FASH-2001
            quantity: 4
            unitPrice: 89900
            totalPrice: 359600
          - id: item_CHMTF2ON9QK3VJ_2
            orderId: CHMTF2ON9QK3VJ
            productId: prod_713430108
            title: Organic Matcha Powder
            sku: FOOD-3001
            quantity: 4
            unitPrice: 34900
            totalPrice: 139600
      description: Line items of one order. The list is complete - this endpoint is not paginated.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the line-item read succeeded.
        data:
          type: array
          description: Every line item on the order, in upstream order.
          items:
            $ref: "#/components/schemas/OrderItem"
      required:
        - success
        - data
    BulkOrderOutcome:
      type: object
      additionalProperties: false
      description: One order that the bulk request processed successfully.
      properties:
        orderId:
          type: string
          description: Order that was processed.
        status:
          type: string
          description: State the order is now in.
      required:
        - orderId
        - status
    BulkOrderError:
      type: object
      additionalProperties: false
      description: One order the bulk request could not process.
      properties:
        orderId:
          type: string
          description: Order that failed.
        error:
          type: string
          description: Why this order could not be processed.
        code:
          type: string
          description: Machine-readable reason, when the failure maps to a catalogued error code.
      required:
        - orderId
        - error
    BulkOrderSummary:
      type: object
      additionalProperties: false
      description: Counts for the submitted batch.
      properties:
        total:
          type: integer
          description: Number of orders submitted.
        succeeded:
          type: integer
          description: Number of orders processed successfully.
        failed:
          type: integer
          description: Number of orders that failed.
      required:
        - total
        - succeeded
        - failed
    BulkOrderShipResponse:
      type: object
      example:
        success: true
        data:
          shipped:
            - orderId: 5RR0SWUDOL4Z65
              status: shipped
          errors: []
          summary:
            total: 1
            succeeded: 1
            failed: 0
      description: "Synchronous bulk-ship outcome. Partial success is normal: read errors even when some orders shipped. Asynchronous submissions answer 202 with a job handle instead of this body."
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the bulk request was processed.
        data:
          type: object
          additionalProperties: false
          properties:
            shipped:
              type: array
              description: Orders that were shipped.
              items:
                $ref: "#/components/schemas/BulkOrderOutcome"
            errors:
              type: array
              description: Orders that could not be shipped. Empty when every order succeeded.
              items:
                $ref: "#/components/schemas/BulkOrderError"
            summary:
              $ref: "#/components/schemas/BulkOrderSummary"
              description: Summary details.
          required:
            - shipped
            - errors
            - summary
          description: Response or event payload for this schema.
      required:
        - success
        - data
    BulkOrderCancelResponse:
      type: object
      example:
        success: true
        data:
          cancelled:
            - orderId: QPS3OJQ6DF2QNL
              status: cancelled
          errors: []
          summary:
            total: 1
            succeeded: 1
            failed: 0
      description: "Synchronous bulk-cancel outcome. Partial success is normal: read errors even when some orders were cancelled. Asynchronous submissions answer 202 with a job handle instead of this body."
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the bulk request was processed.
        data:
          type: object
          additionalProperties: false
          properties:
            cancelled:
              type: array
              description: Orders that were cancelled.
              items:
                $ref: "#/components/schemas/BulkOrderOutcome"
            errors:
              type: array
              description: Orders that could not be cancelled. Empty when every order succeeded.
              items:
                $ref: "#/components/schemas/BulkOrderError"
            summary:
              $ref: "#/components/schemas/BulkOrderSummary"
              description: Summary details.
          required:
            - cancelled
            - errors
            - summary
          description: Response or event payload for this schema.
      required:
        - success
        - data
    Seller:
      type: object
      additionalProperties: false
      description: A seller in the marketplace directory.
      properties:
        id:
          type: string
          description: Seller identifier used as X-MallPlus-Seller-Id on seller-scoped calls.
        name:
          type: string
          description: Seller name.
        store_name:
          type: string
          description: Storefront name, when it differs from the seller name.
        email:
          type: string
          description: Seller contact email. Present only when the upstream record exposes one.
        logo:
          type: string
          description: Seller logo URL.
        description:
          type: string
          description: Seller description shown on the storefront.
        created_at:
          type: string
          format: date-time
          description: When the seller was created. ISO-8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: When the seller was last updated. ISO-8601 timestamp.
      required:
        - id
        - name
    SellerListResponse:
      type: object
      example:
        success: true
        data:
          - id: sel_IYzKSV3YnOou
            name: Nike PH Official Store
        meta:
          page: 1
          limit: 1
          total: 1
      description: Seller directory listing. Called with seller headers it returns just that seller; called without them it returns the platform directory page.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the seller list request succeeded.
        data:
          type: array
          description: Sellers on this page.
          items:
            $ref: "#/components/schemas/Seller"
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    SellerResponse:
      type: object
      example:
        success: true
        data:
          id: sel_Oy4-2R7G9OdY
          name: Nike PH Official Store
      description: A single seller.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the seller read succeeded.
        data:
          $ref: "#/components/schemas/Seller"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    Shop:
      type: object
      additionalProperties: false
      description: Profile of the shop the request is authenticated for.
      properties:
        shop_id:
          type: string
          description: Identifier of the authenticated shop.
        name:
          type: string
          description: Shop name.
        description:
          type: string
          description: Shop description shown on the storefront.
        logo:
          type: string
          description: Shop logo URL.
        category:
          type: object
          additionalProperties: false
          nullable: true
          description: Merchandising category of the shop. Null when the shop has none.
          properties:
            id:
              type: string
              description: Shop category identifier.
            name:
              type: string
              description: Shop category name.
          required:
            - id
            - name
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - SUSPENDED
            - PENDING
          description: "Operating state of the shop: ACTIVE - trading normally; PENDING - approved store whose shop record is still awaiting review; SUSPENDED - trading stopped by the platform; INACTIVE - store closed. Absent when the upstream record does not report a store status."
        created_at:
          type: string
          format: date-time
          description: When the shop was created. ISO-8601 timestamp.
      required:
        - shop_id
        - name
    ShopResponse:
      type: object
      example:
        success: true
        data:
          shop_id: sel_E5V1ygvcruzd
          name: Nike PH Official Store
          description: Sandbox shop for testing the MallPlus Open API
          logo: https://sandbox.mallplus.ph/shop-logo.png
          category:
            id: pcat_sandbox
            name: General
          status: ACTIVE
          created_at: 2026-01-01T00:00:00.000Z
      description: Profile of the authenticated shop.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the shop read succeeded.
        data:
          $ref: "#/components/schemas/Shop"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ShopStatus:
      type: object
      additionalProperties: false
      description: Live-trading state of the authenticated shop.
      properties:
        shop_id:
          type: string
          description: Identifier of the authenticated shop.
        status:
          type: string
          enum:
            - ACTIVE
            - PENDING
            - SUSPENDED
            - INACTIVE
          description: "Operating state of the shop: ACTIVE - trading normally; PENDING - approved store whose shop record is still awaiting review; SUSPENDED - trading stopped by the platform; INACTIVE - store closed."
        is_live:
          type: boolean
          description: Whether the shop is currently visible and able to trade. True only when the store is ACTIVE and its shop record is past PENDING.
        last_status_changed_at:
          type: string
          format: date-time
          nullable: true
          description: When the status last changed. Null when the upstream record has never reported a change. ISO-8601 timestamp.
      required:
        - shop_id
        - status
        - is_live
        - last_status_changed_at
    ShopStatusResponse:
      type: object
      example:
        success: true
        data:
          shop_id: sel_mXFhraLPCEbq
          status: ACTIVE
          is_live: true
          last_status_changed_at: null
      description: Live-trading state of the authenticated shop.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the shop status read succeeded.
        data:
          $ref: "#/components/schemas/ShopStatus"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    SellerProfile:
      type: object
      additionalProperties: false
      description: Self-profile of the seller the request is authenticated for.
      properties:
        id:
          type: string
          description: Identifier of the authenticated seller.
        name:
          type: string
          description: Seller name.
        store_name:
          type: string
          description: Storefront name, when it differs from the seller name.
        logo:
          type: string
          description: Seller logo URL.
        description:
          type: string
          description: Seller description shown on the storefront.
        created_at:
          type: string
          format: date-time
          description: When the seller was created. ISO-8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: When the seller was last updated. ISO-8601 timestamp.
      required:
        - id
        - name
    SellerProfileResponse:
      type: object
      example:
        success: true
        data:
          id: sel_2ke1Ofpi6f0Z
          name: Nike PH Official Store
      description: Self-profile of the authenticated seller.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the seller profile read succeeded.
        data:
          $ref: "#/components/schemas/SellerProfile"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ApiCallEndpointStats:
      type: object
      additionalProperties: false
      description: Call counts for one endpoint over the requested window.
      properties:
        endpoint:
          type: string
          description: Endpoint path or route pattern the counts belong to.
        successCalls:
          type: integer
          description: Calls that returned a 2xx status.
        failCalls:
          type: integer
          description: Calls that returned a non-2xx status.
        totalCalls:
          type: integer
          description: All calls to this endpoint in the window.
        successRate:
          type: number
          description: Share of calls that succeeded, from 0 to 1.
      required:
        - endpoint
        - successCalls
        - failCalls
        - totalCalls
        - successRate
    ApiCallSeriesBucket:
      type: object
      additionalProperties: false
      description: One time bucket of the usage series.
      properties:
        ts:
          type: string
          format: date-time
          description: Start of the bucket, in UTC. ISO-8601 timestamp.
        totalCalls:
          type: integer
          description: All calls in this bucket.
        successCalls:
          type: integer
          description: Calls that returned a 2xx status.
        failCalls:
          type: integer
          description: Calls that returned a non-2xx status.
      required:
        - ts
        - totalCalls
        - successCalls
        - failCalls
    QuotaMeter:
      type: object
      additionalProperties: false
      description: Live rate-limit meter for the calling app, read at request time.
      properties:
        window:
          type: string
          enum:
            - per_minute
          description: Window the meter counts over.
        limit:
          type: integer
          description: Requests allowed in the window for this app.
        used:
          type: integer
          description: Requests already charged against the current window.
        remaining:
          type: integer
          description: Requests still available in the current window.
        resetAt:
          type: integer
          nullable: true
          description: Unix seconds at which the current window resets. Null when the app is idle (no open window) or the meter store is unavailable.
      required:
        - window
        - limit
        - used
        - remaining
        - resetAt
    UsageResponse:
      type: object
      example:
        success: true
        data:
          summary:
            successRate: 0.98
            successCalls: 490
            failCalls: 10
            totalCalls: 500
          endpoints:
            - endpoint: /open/v1/orders
              successCalls: 300
              failCalls: 4
              totalCalls: 304
              successRate: 0.9868
            - endpoint: /open/v1/products
              successCalls: 190
              failCalls: 6
              totalCalls: 196
              successRate: 0.9694
          quota:
            window: per_minute
            limit: 600
            used: 42
            remaining: 558
            resetAt: 1787649944
          series:
            granularity: daily
            from: 2026-08-19T00:00:00.000Z
            to: 2026-08-26T00:00:00.000Z
            buckets:
              - ts: 2026-08-25T00:00:00.000Z
                totalCalls: 120
                successCalls: 118
                failCalls: 2
      description: The calling app's own API-call statistics. Scoped to the authenticated app - there is no cross-app view. Pass granularity=daily|hourly to include the time series.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the usage read succeeded.
        data:
          type: object
          additionalProperties: false
          properties:
            summary:
              type: object
              additionalProperties: false
              description: Totals across every endpoint in the window.
              properties:
                successRate:
                  type: number
                  description: Share of calls that succeeded, from 0 to 1.
                successCalls:
                  type: integer
                  description: Calls that returned a 2xx status.
                failCalls:
                  type: integer
                  description: Calls that returned a non-2xx status.
                totalCalls:
                  type: integer
                  description: All calls in the window.
              required:
                - successRate
                - successCalls
                - failCalls
                - totalCalls
            endpoints:
              type: array
              description: Per-endpoint breakdown.
              items:
                $ref: "#/components/schemas/ApiCallEndpointStats"
            quota:
              $ref: "#/components/schemas/QuotaMeter"
              description: Quota details.
            series:
              type: object
              additionalProperties: false
              description: Time series. Present only when the request passes granularity.
              properties:
                granularity:
                  type: string
                  enum:
                    - daily
                    - hourly
                  description: Bucket size of the series.
                from:
                  type: string
                  format: date-time
                  description: Start of the series window, in UTC. ISO-8601 timestamp.
                to:
                  type: string
                  format: date-time
                  description: End of the series window, in UTC. ISO-8601 timestamp.
                buckets:
                  type: array
                  description: Buckets in chronological order.
                  items:
                    $ref: "#/components/schemas/ApiCallSeriesBucket"
              required:
                - granularity
                - from
                - to
                - buckets
          required:
            - summary
            - endpoints
            - quota
          description: Response or event payload for this schema.
      required:
        - success
        - data
    AccessLog:
      type: object
      additionalProperties: false
      description: One recorded API call made with the calling app credentials.
      properties:
        id:
          type: string
          description: Access-log entry identifier.
        partnerAppId:
          type: string
          description: App the call was made with.
        endpoint:
          type: string
          description: Path that was called.
        method:
          type: string
          description: HTTP method of the call.
        statusCode:
          type: integer
          description: HTTP status the platform answered with.
        requestId:
          type: string
          description: Request identifier echoed on the response - quote it when contacting support.
        createdAt:
          type: string
          format: date-time
          description: When the call was received. ISO-8601 timestamp.
      required:
        - id
        - partnerAppId
        - endpoint
        - method
        - statusCode
        - requestId
        - createdAt
    AccessLogListResponse:
      type: object
      example:
        success: true
        data:
          - id: log_01J8XYZ
            partnerAppId: app-usage-logs-schema
            endpoint: /open/v1/orders
            method: GET
            statusCode: 200
            requestId: 01M0VZQDM5VZZ6157NCN8807Q1
            createdAt: 2026-08-26T03:15:00.000Z
        meta:
          page: 1
          limit: 20
          total: 1
      description: The calling app's own access log. Scoped to the authenticated app.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the access-log read succeeded.
        data:
          type: array
          description: Access-log entries on this page, newest first.
          items:
            $ref: "#/components/schemas/AccessLog"
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    Webhook:
      type: object
      additionalProperties: false
      description: A webhook subscription owned by the calling app.
      properties:
        id:
          type: string
          description: Subscription identifier.
        partnerAppId:
          type: string
          description: App that owns the subscription.
        eventType:
          type: string
          enum:
            - order.created
            - order.updated
            - order.shipped
            - order.cancelled
            - order.status.updated
            - inventory.updated
            - product.created
            - product.updated
            - product.stock.updated
            - product.price.updated
            - product.deleted
            - fulfillment.created
            - fulfillment.updated
            - fulfillment.shipped
            - return.created
            - return.approved
            - return.rejected
            - return.disputed
            - return.status.updated
            - authorization.granted
            - authorization.revoked
            - authorization.expiring
          description: Event this subscription delivers.
        callbackUrl:
          type: string
          description: HTTPS endpoint the platform posts deliveries to.
        isActive:
          type: boolean
          description: Whether deliveries are currently sent. An inactive subscription is kept but not delivered to.
        createdAt:
          type: string
          format: date-time
          description: When the subscription was created. ISO-8601 timestamp.
        updatedAt:
          type: string
          format: date-time
          description: When the subscription was last updated. ISO-8601 timestamp.
      required:
        - id
        - partnerAppId
        - eventType
        - callbackUrl
        - isActive
        - createdAt
        - updatedAt
    WebhookListResponse:
      type: object
      example:
        success: true
        data:
          - id: whs_01J8XYZ
            partnerAppId: app_01J8ABC
            eventType: order.created
            callbackUrl: https://partner.example.com/hooks/mallplus
            isActive: true
            createdAt: 2026-08-26T03:15:00.000Z
            updatedAt: 2026-08-26T03:15:00.000Z
        meta:
          page: 1
          limit: 20
          total: 1
      description: The calling app's webhook subscriptions. An app only ever sees its own.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the subscription list read succeeded.
        data:
          type: array
          description: Subscriptions on this page.
          items:
            $ref: "#/components/schemas/Webhook"
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    WebhookResponse:
      type: object
      example:
        success: true
        data:
          id: whs_01J8XYZ
          partnerAppId: app_01J8ABC
          eventType: order.created
          callbackUrl: https://partner.example.com/hooks/mallplus
          isActive: true
          createdAt: 2026-08-26T03:15:00.000Z
          updatedAt: 2026-08-26T03:15:00.000Z
      description: A single webhook subscription.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the subscription request succeeded.
        data:
          $ref: "#/components/schemas/Webhook"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    WebhookDeleteResponse:
      type: object
      example:
        success: true
        data:
          deleted: true
      description: Confirmation that the subscription was deleted.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the delete succeeded.
        data:
          type: object
          additionalProperties: false
          properties:
            deleted:
              type: boolean
              enum:
                - true
              description: Always true on a successful delete.
          required:
            - deleted
          description: Response or event payload for this schema.
      required:
        - success
        - data
    WebhookTestResponse:
      type: object
      example:
        success: true
        data:
          accepted: true
          event: order.created
      description: Acknowledgement that a test delivery was accepted. The platform answers 202 and dispatches asynchronously - a 202 means accepted for delivery, not delivered.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the test dispatch was accepted.
        data:
          type: object
          additionalProperties: false
          properties:
            accepted:
              type: boolean
              enum:
                - true
              description: Always true when the platform queued the test delivery.
            event:
              type: string
              enum:
                - order.created
                - order.updated
                - order.shipped
                - order.cancelled
                - order.status.updated
                - inventory.updated
                - product.created
                - product.updated
                - product.stock.updated
                - product.price.updated
                - product.deleted
                - fulfillment.created
                - fulfillment.updated
                - fulfillment.shipped
                - return.created
                - return.approved
                - return.rejected
                - return.disputed
                - return.status.updated
                - authorization.granted
                - authorization.revoked
                - authorization.expiring
              description: Event type the test delivery was queued for.
          required:
            - accepted
            - event
          description: Response or event payload for this schema.
      required:
        - success
        - data
    CredentialRotationResponse:
      type: object
      example:
        success: true
        data:
          clientId: mp_d6a1c3...
          clientSecret: <shown once - store it now>
          message: Sandbox secret rotated. Store this secret - it will not be shown again.
      description: Newly issued sandbox credentials. The secret is returned ONCE and is never retrievable again - store it before discarding the response.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the rotation succeeded.
        data:
          type: object
          additionalProperties: false
          properties:
            clientId:
              type: string
              description: Sandbox client ID. Unchanged by rotation.
            clientSecret:
              type: string
              description: The new sandbox secret, shown once. The previous secret stops working immediately.
            message:
              type: string
              description: Human-readable reminder that the secret is shown only once.
          required:
            - clientId
            - clientSecret
            - message
          description: Response or event payload for this schema.
      required:
        - success
        - data
    LiveCredentialRotationResponse:
      type: object
      example:
        success: true
        data:
          clientIdLive: mp_live_a1b2c3...
          clientSecretLive: <shown once - store it now>
          message: Production secret rotated. Store this secret - it will not be shown again.
      description: Newly issued production credentials. The secret is returned ONCE and is never retrievable again - store it before discarding the response.
      properties:
        success:
          type: boolean
          enum:
            - true
          description: Whether the rotation succeeded.
        data:
          type: object
          additionalProperties: false
          properties:
            clientIdLive:
              type: string
              description: Production client ID. Unchanged by rotation.
            clientSecretLive:
              type: string
              description: The new production secret, shown once. The previous secret stops working immediately.
            message:
              type: string
              description: Human-readable reminder that the secret is shown only once.
          required:
            - clientIdLive
            - clientSecretLive
            - message
          description: Response or event payload for this schema.
      required:
        - success
        - data
    CategoryListResponse:
      type: object
      description: Product category list response for platform catalog reference data.
      example:
        success: true
        data:
          - category_id: pcat_936307F9C749623D4DE7928B
            name: Speakers
            parent_category_id: pcat_4684804378598A4C767AAC81
        meta:
          page: 1
          limit: 1
          total: 8
      properties:
        success:
          type: boolean
          description: Whether the category list request succeeded.
          example: true
        data:
          type: array
          description: Product categories available for product creation and browsing.
          items:
            $ref: "#/components/schemas/Category"
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    Category:
      type: object
      additionalProperties: false
      description: A product category in the public catalog tree.
      properties:
        category_id:
          type: string
          description: Stable category identifier used by product endpoints.
          example: pcat_936307F9C749623D4DE7928B
        name:
          type: string
          description: Human-readable category name.
          example: Electronics
        handle:
          type: string
          description: Optional URL-safe category handle when upstream provides one.
          example: electronics
        description:
          type: string
          description: Optional category description when upstream provides one.
          example: Phones, computers, and consumer electronics.
        parent_category_id:
          type: string
          nullable: true
          description: Parent category identifier. Root categories return null.
          example: null
      required:
        - category_id
        - name
        - parent_category_id
    CategoryAttributeListResponse:
      type: object
      description: Attribute definitions that apply to a specific product category.
      example:
        success: true
        data:
          - attribute_id: attr_color
            name: Color
            type: select
            required: false
            allowed_values:
              - Black
              - White
              - Silver
      properties:
        success:
          type: boolean
          description: Whether the category attribute request succeeded.
          example: true
        data:
          type: array
          description: Attribute definitions configured for the requested category.
          items:
            $ref: "#/components/schemas/CategoryAttribute"
      required:
        - success
        - data
    CategoryAttribute:
      type: object
      additionalProperties: false
      description: An attribute definition configured for a product category.
      properties:
        attribute_id:
          type: string
          description: Stable attribute identifier used when supplying category-specific product attributes.
          example: attr_color
        name:
          type: string
          description: Human-readable attribute name.
          example: Color
        type:
          type: string
          description: UI input hint from the category attribute definition, such as select or input. This is not a closed enum; new values may appear.
          example: select
        required:
          type: boolean
          description: Whether products in this category must provide a value for the attribute.
          example: false
        allowed_values:
          type: array
          description: Allowed string values for select-style attributes when the upstream definition provides them.
          items:
            type: string
            description: Allowed attribute value.
            example: Black
          example:
            - Black
            - White
            - Silver
      required:
        - attribute_id
        - name
        - required
    AttributeListResponse:
      type: object
      description: Global product attribute definition list response.
      example:
        success: true
        data:
          - attribute_id: attr_color
            name: Color
            type: select
        meta:
          page: 1
          limit: 1
          total: 5
      properties:
        success:
          type: boolean
          description: Whether the attribute list request succeeded.
          example: true
        data:
          type: array
          description: Global product attribute definitions available on the platform.
          items:
            $ref: "#/components/schemas/Attribute"
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    Attribute:
      type: object
      additionalProperties: false
      description: A global product attribute definition.
      properties:
        attribute_id:
          type: string
          description: Stable attribute identifier.
          example: attr_color
        name:
          type: string
          description: Human-readable attribute name.
          example: Color
        type:
          type: string
          description: UI input hint from the attribute definition, such as select, multivalue, unit, or text_area. This is not a closed enum; new values may appear.
          example: select
      required:
        - attribute_id
        - name
    SandboxListMeta:
      type: object
      additionalProperties: false
      description: Count metadata returned by sandbox list operations.
      properties:
        totalCount:
          type: integer
          minimum: 0
          description: Total number of sandbox records visible to the authenticated sandbox app.
          example: 1
      required:
        - totalCount
    SandboxSeller:
      type: object
      additionalProperties: false
      description: Partner-visible sandbox seller used for OAuth and order simulation.
      example:
        id: sel_seeded_contract
        name: Sandbox Seller
        email: sandbox-seller@example.com
        storeName: Sandbox Default Store
        status: active
        sandboxId: sandbox_response_contract
        oauthIdentifier: sel_seeded_contract
        createdAt: 2026-08-26T04:00:00.000Z
        updatedAt: 2026-08-26T04:00:00.000Z
      properties:
        id:
          type: string
          description: Sandbox seller identifier used by sandbox order and seller OAuth flows.
          example: sel_seeded_contract
        name:
          type: string
          description: Display name of the test seller.
          example: Sandbox Seller
        email:
          type: string
          format: email
          description: Email address assigned to the test seller.
          example: sandbox-seller@example.com
        storeName:
          type: string
          description: Storefront name assigned to the test seller.
          example: Sandbox Default Store
        status:
          type: string
          enum:
            - active
            - suspended
          description: Lifecycle status of the test seller within the sandbox.
          example: active
        sandboxId:
          type: string
          description: Sandbox shop identifier linked to a seeded seller when the seller was created from a sandbox shop.
          example: sandbox_response_contract
        oauthIdentifier:
          type: string
          description: Identifier partners use for seller OAuth sandbox consent. Present only for sellers linked to a sandbox shop.
          example: sel_seeded_contract
        createdAt:
          type: string
          format: date-time
          description: ISO-8601 UTC timestamp when the sandbox seller was created.
          example: 2026-08-26T04:00:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: ISO-8601 UTC timestamp when the sandbox seller was last updated.
          example: 2026-08-26T04:00:00.000Z
      required:
        - id
        - name
        - email
        - storeName
        - status
        - createdAt
        - updatedAt
    SandboxSellerResponse:
      type: object
      additionalProperties: false
      description: Single sandbox seller response.
      example:
        success: true
        data:
          id: sel_test_contract
          name: Test Seller
          email: seller@example.com
          storeName: Test Store
          status: active
          createdAt: 2026-08-26T04:00:00.000Z
          updatedAt: 2026-08-26T04:00:00.000Z
      properties:
        success:
          type: boolean
          description: Whether the sandbox seller request succeeded.
          example: true
        data:
          $ref: "#/components/schemas/SandboxSeller"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    SandboxSellerListResponse:
      type: object
      additionalProperties: false
      description: Sandbox seller list response for the authenticated sandbox app.
      example:
        success: true
        data:
          - id: sel_seeded_contract
            name: Sandbox Seller
            email: sandbox-seller@example.com
            storeName: Sandbox Default Store
            status: active
            sandboxId: sandbox_response_contract
            oauthIdentifier: sel_seeded_contract
            createdAt: 2026-08-26T04:00:00.000Z
            updatedAt: 2026-08-26T04:00:00.000Z
        meta:
          totalCount: 1
      properties:
        success:
          type: boolean
          description: Whether the sandbox seller list request succeeded.
          example: true
        data:
          type: array
          description: Sandbox sellers visible to the authenticated sandbox app.
          items:
            $ref: "#/components/schemas/SandboxSeller"
        meta:
          $ref: "#/components/schemas/SandboxListMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
        - meta
    SandboxBuyerShippingAddress:
      type: object
      additionalProperties: false
      description: Shipping address assigned to a sandbox buyer.
      properties:
        line1:
          type: string
          description: Primary street address line.
          example: 1 Sandbox St
        line2:
          type: string
          description: Optional secondary street address line such as unit or floor.
          example: Unit 2
        city:
          type: string
          description: PSGC-aligned Philippine city or municipality.
          example: Manila
        region:
          type: string
          description: PSGC-aligned Philippine region.
          example: NCR
        postalCode:
          type: string
          description: Postal code for the sandbox buyer shipping address.
          example: "1000"
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code for the shipping address.
          example: PH
      required:
        - line1
        - city
        - region
        - postalCode
        - country
    SandboxBuyer:
      type: object
      additionalProperties: false
      description: Partner-visible sandbox buyer used for buyer-driven order simulation.
      example:
        id: buy_test_contract
        name: Sandbox Buyer
        email: sandbox-buyer@example.com
        phoneNumber: "+639001112233"
        shippingAddress:
          line1: 1 Sandbox St
          city: Manila
          region: NCR
          postalCode: "1000"
          country: PH
        createdAt: 2026-08-26T04:00:00.000Z
        updatedAt: 2026-08-26T04:00:00.000Z
      properties:
        id:
          type: string
          description: Sandbox buyer identifier used by sandbox order flows.
          example: buy_test_contract
        name:
          type: string
          description: Display name of the test buyer.
          example: Sandbox Buyer
        email:
          type: string
          format: email
          description: Email address assigned to the test buyer.
          example: sandbox-buyer@example.com
        phoneNumber:
          type: string
          description: Phone number assigned to the test buyer.
          example: "+639001112233"
        shippingAddress:
          $ref: "#/components/schemas/SandboxBuyerShippingAddress"
          description: Shipping address details.
        createdAt:
          type: string
          format: date-time
          description: ISO-8601 UTC timestamp when the sandbox buyer was created.
          example: 2026-08-26T04:00:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: ISO-8601 UTC timestamp when the sandbox buyer was last updated.
          example: 2026-08-26T04:00:00.000Z
      required:
        - id
        - name
        - email
        - phoneNumber
        - shippingAddress
        - createdAt
        - updatedAt
    SandboxBuyerResponse:
      type: object
      additionalProperties: false
      description: Single sandbox buyer response.
      example:
        success: true
        data:
          id: buy_test_contract
          name: Test Buyer
          email: buyer@example.com
          phoneNumber: "+639001234567"
          shippingAddress:
            line1: 123 Test St
            city: Manila
            region: NCR
            postalCode: "1000"
            country: PH
          createdAt: 2026-08-26T04:00:00.000Z
          updatedAt: 2026-08-26T04:00:00.000Z
      properties:
        success:
          type: boolean
          description: Whether the sandbox buyer request succeeded.
          example: true
        data:
          $ref: "#/components/schemas/SandboxBuyer"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    SandboxBuyerListResponse:
      type: object
      additionalProperties: false
      description: Sandbox buyer list response for the authenticated sandbox app.
      example:
        success: true
        data:
          - id: buy_test_contract
            name: Sandbox Buyer
            email: sandbox-buyer@example.com
            phoneNumber: "+639001112233"
            shippingAddress:
              line1: 1 Sandbox St
              city: Manila
              region: NCR
              postalCode: "1000"
              country: PH
            createdAt: 2026-08-26T04:00:00.000Z
            updatedAt: 2026-08-26T04:00:00.000Z
        meta:
          totalCount: 1
      properties:
        success:
          type: boolean
          description: Whether the sandbox buyer list request succeeded.
          example: true
        data:
          type: array
          description: Sandbox buyers visible to the authenticated sandbox app.
          items:
            $ref: "#/components/schemas/SandboxBuyer"
        meta:
          $ref: "#/components/schemas/SandboxListMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
        - meta
    SandboxSeedData:
      type: object
      additionalProperties: false
      description: Sandbox fixture set created or refreshed by the seed operation.
      properties:
        seller:
          $ref: "#/components/schemas/SandboxSeller"
          description: Seller details.
        buyer:
          $ref: "#/components/schemas/SandboxBuyer"
          description: Buyer details.
        productsCount:
          type: integer
          minimum: 0
          description: Number of sandbox products available after the seed operation.
          example: 5
      required:
        - seller
        - buyer
        - productsCount
    SandboxSeedResponse:
      type: object
      additionalProperties: false
      description: Sandbox fixture seed response.
      example:
        success: true
        data:
          seller:
            id: sel_seeded_contract
            name: Sandbox Seller
            email: sandbox-seller@example.com
            storeName: Sandbox Default Store
            status: active
            sandboxId: sandbox_response_contract
            oauthIdentifier: sel_seeded_contract
            createdAt: 2026-08-26T04:00:00.000Z
            updatedAt: 2026-08-26T04:00:00.000Z
          buyer:
            id: buy_test_contract
            name: Sandbox Buyer
            email: sandbox-buyer@example.com
            phoneNumber: "+639001112233"
            shippingAddress:
              line1: 1 Sandbox St
              city: Manila
              region: NCR
              postalCode: "1000"
              country: PH
            createdAt: 2026-08-26T04:00:00.000Z
            updatedAt: 2026-08-26T04:00:00.000Z
          productsCount: 5
      properties:
        success:
          type: boolean
          description: Whether the sandbox seed request succeeded.
          example: true
        data:
          $ref: "#/components/schemas/SandboxSeedData"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ProductVariant:
      type: object
      additionalProperties: false
      description: A single purchasable variant of a product.
      properties:
        variant_id:
          type: string
          description: Product variant ID associated with this value.
        sku:
          type: string
          nullable: true
          description: Seller SKU.
        price:
          type: integer
          description: Integer amount in PHP centavos.
          nullable: true
        stock_quantity:
          type: integer
          description: Available stock on hand at the default location
          nullable: true
        options:
          type: array
          description: Variant option values (e.g. Size=M, Color=Black).
          items:
            type: object
            additionalProperties: false
            description: One option of the variant, as a name/value pair.
            properties:
              name:
                type: string
                nullable: true
                description: Option name, for example Size.
              value:
                type: string
                nullable: true
                description: Option value, for example M.
        dimensions:
          type: object
          additionalProperties: false
          description: Package dimensions in centimetres.
          properties:
            length:
              type: number
              description: Package length in centimetres.
            width:
              type: number
              description: Package width in centimetres.
            height:
              type: number
              description: Package height in centimetres.
        weight:
          type: number
          description: Weight in grams
        images:
          type: array
          description: Variant image URLs, in display order.
          items:
            type: string
            description: Publicly reachable https image URL.
      required:
        - variant_id
    Product:
      type: object
      additionalProperties: false
      description: Partner-safe product view. Supplier-internal fields are stripped at the API boundary.
      properties:
        product_id:
          type: string
          description: Product ID associated with this value.
        short_id:
          type: string
          description: Human-friendly alternate product identifier
        name:
          type: string
          description: Partner-visible name.
        description:
          type: string
          description: Human-readable description.
        status:
          type: string
          enum:
            - live
            - unlisted
            - delisted
            - proposed
            - under_review
            - archived
          description: "Current product status. This is the complete set — settable by the partner via POST /open/v1/products/{id}/status: live, unlisted, delisted; read-only, set by the platform: proposed, under_review, archived (proposed after create, under_review while in review, archived after delete). Every value here is also accepted by GET /open/v1/products?status=."
        sku:
          type: string
          description: SKU of the primary variant
        price:
          type: integer
          description: Integer amount in PHP centavos.
        stock:
          type: integer
          description: Stock of the primary variant
        category:
          type: string
          description: Product category.
        thumbnail:
          type: string
          description: Product thumbnail image URL.
        images:
          type: array
          description: Product image URLs, in display order.
          items:
            type: string
            description: Publicly reachable https image URL.
        weight:
          type: number
          description: Weight in grams
        dimensions:
          type: object
          additionalProperties: false
          description: Package dimensions in centimetres.
          properties:
            length:
              type: number
              description: Package length in centimetres.
            width:
              type: number
              description: Package width in centimetres.
            height:
              type: number
              description: Package height in centimetres.
        variants:
          type: array
          items:
            $ref: "#/components/schemas/ProductVariant"
          description: Product variants.
        options_order:
          type: array
          description: Variant option groups in display order, each with its values in order — the order a storefront renders the variant picker in. Derived at create time from the order the options were submitted in; absent on products with no option groups.
          items:
            type: object
            additionalProperties: false
            properties:
              title:
                type: string
                description: Option group name, e.g. `Colour`.
              values:
                type: array
                description: The group's values, in display order.
                items:
                  type: string
            required:
              - title
              - values
        created_at:
          type: string
          format: date-time
          description: Created at as an ISO-8601 timestamp.
        updated_at:
          type: string
          format: date-time
          description: Updated at as an ISO-8601 timestamp.
      required:
        - product_id
        - name
        - status
    ProductResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          $ref: "#/components/schemas/Product"
          description: Response or event payload for this schema.
      required:
        - success
        - data
    ProductListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: array
          items:
            $ref: "#/components/schemas/Product"
          description: Response or event payload for this schema.
        meta:
          $ref: "#/components/schemas/PaginationMeta"
          description: Response metadata, including pagination when the endpoint returns a list.
      required:
        - success
        - data
    ProductVariantListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
          description: Whether the request completed successfully.
        data:
          type: array
          items:
            $ref: "#/components/schemas/ProductVariant"
          description: Response or event payload for this schema.
      required:
        - success
        - data
