{
  "openapi": "3.0.1",
  "info": {
    "title": "Datavoryx – Shopify Price & Stock Monitor",
    "description": "Monitor Shopify product prices, stock availability, and competitor pricing. Detect price drops, price increases, and restocks. Track persistent price history, set custom price thresholds, and receive automated Discord alerts when changes occur.",
    "version": "0.0",
    "x-build-id": "RK63ujNNkLJoQ80Oh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/soruvalab~datavoryx-shopify-price-stock-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-soruvalab-datavoryx-shopify-price-stock-monitor",
        "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/soruvalab~datavoryx-shopify-price-stock-monitor/runs": {
      "post": {
        "operationId": "runs-sync-soruvalab-datavoryx-shopify-price-stock-monitor",
        "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/soruvalab~datavoryx-shopify-price-stock-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-soruvalab-datavoryx-shopify-price-stock-monitor",
        "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": [
          "shopUrls"
        ],
        "properties": {
          "shopUrls": {
            "title": "Shopify Store URLs",
            "minItems": 1,
            "maxItems": 10,
            "type": "array",
            "description": "Enter 1 to 10 public Shopify store homepage URLs. Use HTTPS addresses without additional paths or query parameters.",
            "items": {
              "type": "string"
            }
          },
          "maxProducts": {
            "title": "Maximum Products per Store",
            "minimum": 1,
            "maximum": 250,
            "type": "integer",
            "description": "Number of products to check per store, from 1 to 250. Higher limits may increase processing time.",
            "default": 100
          },
          "monitorId": {
            "title": "Monitor ID",
            "pattern": "^[a-zA-Z0-9_-]{8,80}$",
            "minLength": 8,
            "maxLength": 80,
            "type": "string",
            "description": "Optional when using Discord. Use a unique ID to keep monitoring histories separate. Keep the same ID for subsequent runs of the same monitor."
          },
          "discordWebhookUrl": {
            "title": "Discord Webhook URL (Optional)",
            "type": "string",
            "description": "Receive Discord notifications when prices or stock availability change. Leave blank to use Dataset and monitoring reports without Discord. A Monitor ID is required when Discord is not configured."
          },
          "minPriceChangePercent": {
            "title": "Minimum Price Change (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Minimum absolute percentage change required for Discord price alerts. Set to 0 to alert on every price change. Stock alerts are unaffected.",
            "default": 5
          },
          "alertOnPriceDrops": {
            "title": "Alert on Price Drops",
            "type": "boolean",
            "description": "Send Discord alerts when prices decrease by at least the configured percentage.",
            "default": true
          },
          "alertOnPriceIncreases": {
            "title": "Alert on Price Increases",
            "type": "boolean",
            "description": "Send Discord alerts when prices increase by at least the configured percentage.",
            "default": true
          },
          "productSearch": {
            "title": "Product Search",
            "type": "string",
            "description": "Enter a product name, barcode, or SKU to filter products for competitor price comparison.",
            "default": ""
          },
          "sendDiscordTestMessage": {
            "title": "Send Discord Connection Test",
            "type": "boolean",
            "description": "Send a test message to verify the configured Discord webhook.",
            "default": false
          },
          "testPriceStockAlerts": {
            "title": "Send Simulated Price & Stock Alerts",
            "type": "boolean",
            "description": "Send simulated price-drop and back-in-stock messages to Discord.",
            "default": false
          },
          "isolatedChangeTest": {
            "title": "Run Isolated Change Detection Test",
            "type": "boolean",
            "description": "Test price and stock change detection without opening or modifying monitoring history. Sends simulated Discord alerts when a webhook is configured.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}