openapi: 3.2.0 info: title: LoudCrowd Product Data API version: 0.0.0 description: 'LoudCrowd public API definitions, including the account-scoped Brand API and Attribution Events API. ' license: name: MIT url: https://opensource.org/licenses/MIT servers: - url: https://store-api.loudcrowd.com/api description: LoudCrowd Creator Storefronts API - url: https://api.loudcrowd.com description: LoudCrowd Attribution Events API security: - bearerAuth: [] tags: - name: Product Data paths: /product-data: post: summary: Send Product Data description: Batch upsert or delete product catalog records in LoudCrowd. Aligns with the supported file formats documented in the LoudCrowd developer docs. This API is designed to mirror the ingestion pipeline currently used for file-based product loads so that existing mappings can be reused. operationId: send_product_data parameters: - in: header name: X-LC-SHOP-ID description: Your LoudCrowd internal shop identifier required: true schema: type: string - in: header name: X-Signature description: The SHA-256 hexadecimal digest of the UTF-8 encoded JSON payload required: true schema: type: string - in: header name: X-LC-TOPIC description: Specifies the operation to apply to the provided products required: true schema: type: string enum: - PRODUCT_UPSERT - PRODUCT_DELETE - in: header name: Content-Type description: Content type of the request required: true schema: type: string default: application/json requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/sendProductDataRequest' responses: '200': description: Request accepted and processed content: application/json: schema: type: object properties: success: type: boolean example: true message: type: string example: Product data processed processedCount: type: integer example: 123 '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '422': $ref: '#/components/responses/422' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' tags: - Product Data components: schemas: productPrices: properties: discountedPriceRanges: description: List of the discounted price ranges for the product. items: properties: discount: properties: id: type: string type: object range: properties: max: type: number min: type: number type: object type: object type: array maxItems: 10 discountedPrices: description: List of the discounted prices for the product. items: properties: discount: properties: id: type: string type: object price: type: number type: object type: array maxItems: 10 price: description: The price of the product. type: - number - 'null' priceRange: description: The price range of the product. properties: max: type: number min: type: number type: - object - 'null' promotionalPrice: description: If there is a site wide promotion applied to the product data, the promotional price of the product. type: - number - 'null' promotionalPriceRange: description: If there is a site wide promotion applied to the product data, the promotional price range of the product. properties: max: type: number min: type: number type: - object - 'null' salePrice: description: The sale price of the product. type: - number - 'null' salePriceRange: description: The sale price range of the product. properties: max: type: number min: type: number type: - object - 'null' type: - object - 'null' sendProductDataRequest: type: object required: - products properties: products: type: array description: Batch of product records to upsert or delete. minItems: 1 maxItems: 1000 items: $ref: '#/components/schemas/productIngestRecord' productVariantIngestRecord: type: object required: - variant_sku properties: variant_sku: type: string description: Variant SKU (acts as external key) price: type: - number - 'null' description: Variant price sale_price: type: - number - 'null' description: Variant sale price product_url: type: - string - 'null' description: Variant PDP URL selected_options: type: - array - 'null' description: Key/value option selections like Size/Color items: $ref: '#/components/schemas/selectedOptionItem' maxItems: 100 priceCurrencyCode: enum: - USD - CAD - GBP - AUD - AED - AFN - ALL - AMD - ANG - AOA - ARS - AWG - AZN - BAM - BBD - BDT - BGN - BHD - BIF - BMD - BND - BOB - BOV - BRL - BSD - BTN - BWP - BYN - BZD - CDF - CHE - CHF - CHW - CLF - CLP - CNY - COP - COU - CRC - CUC - CUP - CVE - CZK - DJF - DKK - DOP - DZD - EGP - ERN - ETB - EUR - FJD - FKP - GEL - GHS - GIP - GMD - GNF - GTQ - GYD - HKD - HNL - HRK - HTG - HUF - IDR - ILS - INR - IQD - IRR - ISK - JMD - JOD - JPY - KES - KGS - KHR - KMF - KPW - KRW - KWD - KYD - KZT - LAK - LBP - LKR - LRD - LSL - LYD - MAD - MDL - MGA - MKD - MMK - MNT - MOP - MRU - MUR - MVR - MWK - MXN - MXV - MYR - MZN - NAD - NGN - NIO - NOK - NPR - NZD - OMR - PAB - PEN - PGK - PHP - PKR - PLN - PYG - QAR - RON - RSD - RUB - RWF - SAR - SBD - SCR - SDG - SEK - SGD - SHP - SLE - SLL - SOS - SRD - SSP - STN - SVC - SYP - SZL - THB - TJS - TMT - TND - TOP - TRY - TTD - TWD - TZS - UAH - UGX - USN - UYI - UYU - UYW - UZS - VED - VES - VND - VUV - WST - XAF - XAG - XAU - XBA - XBB - XBC - XBD - XCD - XDR - XOF - XPD - XPF - XPT - XSU - XTS - XUA - XXX - YER - ZAR - ZMW - ZWL type: - string - 'null' description: The currency code of the product prices. example: USD selectedOptionItem: properties: name: description: The name of the selected option. type: - string - 'null' example: Color value: description: The value of the selected option. type: - string - 'null' example: Red type: object productIngestRecord: type: object description: Product payload aligned with file-based ingestion formats. Use nulls for clearing optional values. required: - platform_product_id - title properties: platform_product_id: type: string description: Unique product identifier from the eCommerce platform handle: type: string description: Product handle or slug title: type: string description: Product title brand: type: - string - 'null' description: Brand name image_src: type: - string - 'null' description: Primary product image URL product_url: type: - string - 'null' description: Product PDP URL active: type: boolean description: Whether product is active/available in_stock: type: - boolean - 'null' description: Inventory availability flag price_currency_code: $ref: '#/components/schemas/priceCurrencyCode' prices: $ref: '#/components/schemas/productPrices' promotional_code: type: - string - 'null' description: Applied sitewide promo code, if any collections: type: - array - 'null' description: Optional list of collection identifiers the product belongs to items: type: string maxItems: 250 tags: type: - array - 'null' description: Optional list of product tags items: type: string maxItems: 250 variants: type: - array - 'null' description: Optional list of product variants items: $ref: '#/components/schemas/productVariantIngestRecord' maxItems: 250 responses: '429': description: You hit the rate limit for this account. All endpoints share the same rate limit for an account. headers: X-RateLimit-Limit: schema: type: integer description: Total requests allowed in the current window X-RateLimit-Remaining: schema: type: integer description: Requests remaining in the current window X-RateLimit-Reset: schema: type: integer description: Unix epoch seconds when the current window resets Retry-After: schema: type: integer description: Seconds until the next request may be made content: application/json: schema: type: object properties: code: type: integer example: 429 message: type: string example: Rate Limit Exceeded '400': description: Request is missing or has a bad parameter. content: application/json: schema: type: object properties: code: type: integer example: 400 message: type: string example: Bad Request '500': description: Something is wrong on LoudCrowd's end. content: application/json: schema: type: object properties: code: type: integer example: 500 message: type: string example: Server Error '401': description: Key is valid, but the account does not have permissions to perform this action. content: application/json: schema: type: object properties: code: type: integer example: 401 message: type: string example: Not Authorized '422': description: Validation failed for one or more product records. content: application/json: schema: type: object properties: code: type: integer example: 422 message: type: string example: Unprocessable Entity recordErrors: type: array description: Per-record validation errors items: type: object properties: index: type: integer description: Zero-based index of the product in the payload example: 0 field: type: string description: JSON pointer or field path example: products[0].platform_product_id code: type: string description: Machine-readable error code example: REQUIRED message: type: string description: Human readable error example: platform_product_id is required required: - index - code - message securitySchemes: bearerAuth: type: http scheme: bearer description: 'Authorization header using the Bearer scheme. Example: "Authorization: Bearer {token}"' accountKeyAuth: type: apiKey in: header name: X-LC-Account-Key description: API token created in LoudCrowd. x-default: YOUR_API_TOKEN x-readme: explorer-enabled: false