{
  "openapi": "3.0.1",
  "info": {
    "title": "VariantLens — Shopify Feed & Variant Checker",
    "description": "Compare shopping-feed prices, stock and variant links with exact Shopify product data, rendered selection and JSON-LD. Optional GPT-6 Luna advice.",
    "version": "0.1",
    "x-build-id": "wxzkEMczYMdcGzaVy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nathancole1992~variant-lens/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nathancole1992-variant-lens",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/nathancole1992~variant-lens/runs": {
      "post": {
        "operationId": "runs-sync-nathancole1992-variant-lens",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/nathancole1992~variant-lens/run-sync": {
      "post": {
        "operationId": "run-sync-nathancole1992-variant-lens",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode",
          "storeDomain",
          "feedText"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "demo",
              "live"
            ],
            "type": "string",
            "description": "Demo uses fictional fixtures without contacting a store. Live checks your authorized store.",
            "default": "demo"
          },
          "storeDomain": {
            "title": "Store hostname",
            "type": "string",
            "description": "Exact store hostname, without https:// or a path. Redirects may not leave this hostname.",
            "default": "demo.variantlens.test"
          },
          "feedText": {
            "title": "Feed export",
            "maxLength": 1000000,
            "type": "string",
            "description": "1–25 rows in CSV, TSV or JSON. Required: id, link with numeric variant, price, availability. Optional: sku, color, size, sale_price, sale_price_effective_date, currency.",
            "default": "id,title,link,price,availability,sku,color,size\nVL-101,Studio cotton tee,https://demo.variantlens.test/products/studio-cotton-tee?variant=101,29.00 GBP,in_stock,VL-101,Ink,M\nVL-102,Everyday canvas tote,https://demo.variantlens.test/products/everyday-canvas-tote?variant=102,24.00 GBP,in_stock,VL-102,Oat,One size\nVL-103,Ribbed wool beanie,https://demo.variantlens.test/products/ribbed-wool-beanie?variant=103,32.00 GBP,in_stock,VL-103,Clay,One size\nVL-104,Linen weekend shirt,https://demo.variantlens.test/products/linen-weekend-shirt?variant=104,64.00 GBP,in_stock,VL-104,Chalk,L\nVL-105,Trail bottle,https://demo.variantlens.test/products/trail-bottle?variant=105,22.00 GBP,in_stock,VL-105,Forest,750ml\nVL-106,Merino everyday socks,https://demo.variantlens.test/products/merino-everyday-socks?variant=106,18.00 GBP,in_stock,VL-106,Ink,M\n"
          },
          "authorized": {
            "title": "I own or have permission to audit this store",
            "type": "boolean",
            "description": "Required for live mode. Only public product pages are checked.",
            "default": false
          },
          "renderPages": {
            "title": "Render pages and capture screenshots",
            "type": "boolean",
            "description": "Check visible price and selected purchase-form variant. Static-only checks cannot establish a landing-page match.",
            "default": true
          },
          "allowAI": {
            "title": "Send diagnostic findings to OpenAI for advice",
            "type": "boolean",
            "description": "Optional. Uses GPT-6 Luna and your OpenAI key. API charges are separate; one bounded request, no automatic retry. AI does not change verdicts.",
            "default": false
          },
          "openaiApiKey": {
            "title": "OpenAI API key",
            "type": "string",
            "description": "Optional encrypted key, required if AI is enabled. Never include it in the feed. No creator key is bundled."
          },
          "connectionMode": {
            "title": "Cloud connection",
            "enum": [
              "residential",
              "apify",
              "direct"
            ],
            "type": "string",
            "description": "Direct is the default. Optional proxy modes use one fixed Apify session, without automatic rotation or fallback. Proxies do not replace Shopify crawler authorization and can still receive 429s. Proxy usage is included in the per-variant fee; your account must allow the chosen group. Demo makes no proxy requests.",
            "default": "direct"
          },
          "shopifySignatureInput": {
            "title": "Shopify crawler Signature-Input",
            "type": "string",
            "description": "Optional: copy the complete Signature-Input header value from Shopify Admin > Online Store > Preferences > Crawler access. Create the signature for the exact Store hostname above. Supply Signature below too."
          },
          "shopifySignature": {
            "title": "Shopify crawler Signature",
            "type": "string",
            "description": "Optional encrypted Signature header value from the same Shopify crawler signature. VariantLens adds Signature-Agent automatically and only sends these headers to your exact store hostname. Never paste either header in the feed."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}