{
  "openapi": "3.0.1",
  "info": {
    "title": "Phoenix Catalog Proof",
    "description": "Compare an approved product catalog with its current version. Detect product, price, stock and image changes, optionally verify URLs, and export evidence-ready HTML, CSV and JSON reports before you publish.",
    "version": "1.0",
    "x-build-id": "kZBr3TFmQnYngJgqS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/phoenix-tools~phoenix-catalog-proof/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-phoenix-tools-phoenix-catalog-proof",
        "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/phoenix-tools~phoenix-catalog-proof/runs": {
      "post": {
        "operationId": "runs-sync-phoenix-tools-phoenix-catalog-proof",
        "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/phoenix-tools~phoenix-catalog-proof/run-sync": {
      "post": {
        "operationId": "run-sync-phoenix-tools-phoenix-catalog-proof",
        "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": [
          "baseline",
          "current"
        ],
        "properties": {
          "baseline": {
            "title": "Baseline catalog",
            "required": [
              "sourceType",
              "format"
            ],
            "type": "object",
            "description": "The older or approved catalog used as the reference point.",
            "properties": {
              "sourceType": {
                "title": "Source type",
                "type": "string",
                "description": "Choose URL, inline data, or an existing Apify dataset.",
                "enum": [
                  "url",
                  "inline",
                  "dataset"
                ],
                "enumTitles": [
                  "Public feed URL",
                  "Inline data",
                  "Apify dataset"
                ],
                "default": "inline",
                "editor": "select"
              },
              "label": {
                "title": "Label",
                "type": "string",
                "description": "A human-readable name used in the report.",
                "default": "Approved catalog",
                "editor": "textfield"
              },
              "url": {
                "title": "Feed URL",
                "type": "string",
                "description": "Public HTTP or HTTPS URL for a CSV, JSON, or XML feed.",
                "editor": "textfield"
              },
              "datasetId": {
                "title": "Apify dataset",
                "type": "string",
                "description": "Select a dataset when Source type is Apify dataset.",
                "editor": "resourcePicker",
                "resourceType": "dataset",
                "resourcePermissions": [
                  "READ"
                ]
              },
              "format": {
                "title": "Data format",
                "type": "string",
                "description": "Auto detects common formats. Select one only when detection is wrong.",
                "enum": [
                  "auto",
                  "csv",
                  "json",
                  "xml"
                ],
                "enumTitles": [
                  "Auto detect",
                  "CSV",
                  "JSON",
                  "XML"
                ],
                "default": "auto",
                "editor": "select"
              },
              "content": {
                "title": "Inline CSV, JSON, or XML",
                "type": "string",
                "description": "Paste raw feed content when Source type is Inline data.",
                "editor": "textarea"
              },
              "items": {
                "title": "Inline product array",
                "type": "array",
                "description": "Alternative to raw content. Paste a JSON array of product objects.",
                "editor": "json",
                "items": {
                  "type": "object"
                }
              },
              "itemPath": {
                "title": "Product array path",
                "type": "string",
                "description": "Optional dot path such as catalog.products when products are nested.",
                "editor": "textfield"
              },
              "delimiter": {
                "title": "CSV delimiter",
                "type": "string",
                "description": "Optional one-character delimiter. Leave empty for automatic detection.",
                "maxLength": 1,
                "editor": "textfield"
              }
            },
            "additionalProperties": false
          },
          "current": {
            "title": "Current catalog",
            "required": [
              "sourceType",
              "format"
            ],
            "type": "object",
            "description": "The new or live catalog to audit.",
            "properties": {
              "sourceType": {
                "title": "Source type",
                "type": "string",
                "description": "Choose URL, inline data, or an existing Apify dataset.",
                "enum": [
                  "url",
                  "inline",
                  "dataset"
                ],
                "enumTitles": [
                  "Public feed URL",
                  "Inline data",
                  "Apify dataset"
                ],
                "default": "inline",
                "editor": "select"
              },
              "label": {
                "title": "Label",
                "type": "string",
                "description": "A human-readable name used in the report.",
                "default": "Current catalog",
                "editor": "textfield"
              },
              "url": {
                "title": "Feed URL",
                "type": "string",
                "description": "Public HTTP or HTTPS URL for a CSV, JSON, or XML feed.",
                "editor": "textfield"
              },
              "datasetId": {
                "title": "Apify dataset",
                "type": "string",
                "description": "Select a dataset when Source type is Apify dataset.",
                "editor": "resourcePicker",
                "resourceType": "dataset",
                "resourcePermissions": [
                  "READ"
                ]
              },
              "format": {
                "title": "Data format",
                "type": "string",
                "description": "Auto detects common formats. Select one only when detection is wrong.",
                "enum": [
                  "auto",
                  "csv",
                  "json",
                  "xml"
                ],
                "enumTitles": [
                  "Auto detect",
                  "CSV",
                  "JSON",
                  "XML"
                ],
                "default": "auto",
                "editor": "select"
              },
              "content": {
                "title": "Inline CSV, JSON, or XML",
                "type": "string",
                "description": "Paste raw feed content when Source type is Inline data.",
                "editor": "textarea"
              },
              "items": {
                "title": "Inline product array",
                "type": "array",
                "description": "Alternative to raw content. Paste a JSON array of product objects.",
                "editor": "json",
                "items": {
                  "type": "object"
                }
              },
              "itemPath": {
                "title": "Product array path",
                "type": "string",
                "description": "Optional dot path such as catalog.products when products are nested.",
                "editor": "textfield"
              },
              "delimiter": {
                "title": "CSV delimiter",
                "type": "string",
                "description": "Optional one-character delimiter. Leave empty for automatic detection.",
                "maxLength": 1,
                "editor": "textfield"
              }
            },
            "additionalProperties": false
          },
          "matchingKeys": {
            "title": "Matching priority",
            "minItems": 1,
            "maxItems": 4,
            "type": "array",
            "description": "Fields are tried in this order. The first non-empty value identifies a product.",
            "items": {
              "type": "string"
            },
            "default": [
              "sku",
              "gtin",
              "id",
              "productUrl"
            ]
          },
          "fieldMapping": {
            "title": "Common field mapping",
            "type": "object",
            "description": "Optional dot paths used for both catalogs. Examples: variant.sku, pricing.amount, media.imageUrl.",
            "properties": {
              "id": {
                "title": "ID path",
                "type": "string",
                "description": "Dot path to the product ID.",
                "editor": "textfield"
              },
              "sku": {
                "title": "SKU path",
                "type": "string",
                "description": "Dot path to the SKU.",
                "editor": "textfield"
              },
              "gtin": {
                "title": "GTIN path",
                "type": "string",
                "description": "Dot path to the GTIN, EAN, UPC, or barcode.",
                "editor": "textfield"
              },
              "title": {
                "title": "Title path",
                "type": "string",
                "description": "Dot path to the product title.",
                "editor": "textfield"
              },
              "price": {
                "title": "Price path",
                "type": "string",
                "description": "Dot path to the product price.",
                "editor": "textfield"
              },
              "currency": {
                "title": "Currency path",
                "type": "string",
                "description": "Dot path to the currency code.",
                "editor": "textfield"
              },
              "stock": {
                "title": "Stock path",
                "type": "string",
                "description": "Dot path to stock or availability.",
                "editor": "textfield"
              },
              "image": {
                "title": "Image URL path",
                "type": "string",
                "description": "Dot path to the primary image URL.",
                "editor": "textfield"
              },
              "productUrl": {
                "title": "Product URL path",
                "type": "string",
                "description": "Dot path to the product page URL.",
                "editor": "textfield"
              }
            },
            "default": {},
            "additionalProperties": false
          },
          "baselineFieldMapping": {
            "title": "Baseline-only field overrides",
            "type": "object",
            "description": "Optional mappings used only for the baseline catalog.",
            "default": {}
          },
          "currentFieldMapping": {
            "title": "Current-only field overrides",
            "type": "object",
            "description": "Optional mappings used only for the current catalog.",
            "default": {}
          },
          "settings": {
            "title": "Audit settings",
            "type": "object",
            "description": "Control limits, URL checks, and report behavior.",
            "properties": {
              "maxProducts": {
                "title": "Maximum products per catalog",
                "type": "integer",
                "description": "Stops oversized jobs before they consume unexpected resources.",
                "minimum": 1,
                "maximum": 50000,
                "default": 5000,
                "editor": "number"
              },
              "requestTimeoutSecs": {
                "title": "Request timeout in seconds",
                "type": "integer",
                "description": "Maximum time for each feed or URL request.",
                "minimum": 3,
                "maximum": 120,
                "default": 30,
                "editor": "number"
              },
              "maxResponseMegabytes": {
                "title": "Maximum feed size in MB",
                "type": "integer",
                "description": "Maximum downloaded size for each feed.",
                "minimum": 1,
                "maximum": 100,
                "default": 25,
                "editor": "number"
              },
              "concurrency": {
                "title": "Concurrent URL checks",
                "type": "integer",
                "description": "Number of image and product links checked at the same time.",
                "minimum": 1,
                "maximum": 50,
                "default": 10,
                "editor": "number"
              },
              "priceTolerance": {
                "title": "Price tolerance",
                "type": "number",
                "description": "Ignore price differences up to this absolute amount.",
                "minimum": 0,
                "maximum": 1000000,
                "default": 0.01,
                "editor": "number"
              },
              "checkImageUrls": {
                "title": "Check image URLs",
                "type": "boolean",
                "description": "Verify image status and content type.",
                "default": true,
                "editor": "checkbox"
              },
              "checkProductUrls": {
                "title": "Check product URLs",
                "type": "boolean",
                "description": "Verify product page status and redirects.",
                "default": true,
                "editor": "checkbox"
              },
              "inspectCanonicals": {
                "title": "Inspect canonical tags",
                "type": "boolean",
                "description": "Downloads up to 1 MB of HTML for checked product pages.",
                "default": false,
                "editor": "checkbox"
              },
              "maxUrlChecks": {
                "title": "Maximum URL checks",
                "type": "integer",
                "description": "Combined maximum for product and image URLs.",
                "minimum": 0,
                "maximum": 10000,
                "default": 500,
                "editor": "number"
              },
              "includeUnchanged": {
                "title": "Include unchanged products",
                "type": "boolean",
                "description": "Adds unchanged products to the findings dataset.",
                "default": false,
                "editor": "checkbox"
              },
              "reportTitle": {
                "title": "Report title",
                "type": "string",
                "description": "Heading shown in the downloadable evidence report.",
                "minLength": 1,
                "maxLength": 160,
                "default": "Phoenix Catalog Proof Report",
                "editor": "textfield"
              }
            },
            "default": {},
            "additionalProperties": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}