{
  "openapi": "3.0.1",
  "info": {
    "title": "ChatGPT Product Feed Generator for Business Hub (CSV / JSONL)",
    "description": "Turn a Google Merchant feed, a WooCommerce store or product pages into the product file ChatGPT Business Hub asks for: OpenAI's CSV / JSONL feed with every row checked against the spec (required fields, price, availability, GTIN, variants) and a list of what to fix. $1 per 1,000 products.",
    "version": "0.1",
    "x-build-id": "cS8unR2QFHPWKkY3P"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data_daemon~chatgpt-product-feed-generator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data_daemon-chatgpt-product-feed-generator",
        "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/data_daemon~chatgpt-product-feed-generator/runs": {
      "post": {
        "operationId": "runs-sync-data_daemon-chatgpt-product-feed-generator",
        "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/data_daemon~chatgpt-product-feed-generator/run-sync": {
      "post": {
        "operationId": "run-sync-data_daemon-chatgpt-product-feed-generator",
        "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",
        "properties": {
          "merchantFeedUrls": {
            "title": "Google Merchant / Shopping feed URLs",
            "type": "array",
            "description": "Links to product feed files in Google Merchant Center format: XML (RSS or Atom with `g:` fields), TSV or CSV, plain or gzipped. Most shop platforms and feed plugins can give you this link (WooCommerce feed plugins, BigCommerce, Magento, Wix, Squarespace, Shopify feed apps). This is the most complete source because the file already has brand, GTIN, variants and sale prices. Leave every source empty to convert a sample feed and see the output.",
            "items": {
              "type": "string"
            }
          },
          "wooCommerceStoreUrls": {
            "title": "WooCommerce store URLs",
            "type": "array",
            "description": "Home page of a WooCommerce store, for example `https://shop.example.com`. The Actor reads the store's public product API (`/wp-json/wc/store/v1/products`): every published product with price, stock, images, categories, ratings and variations. No plugin and no login. If the store has switched that API off, use its feed URL or sitemap instead.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sitemapUrls": {
            "title": "Sitemap URLs (any shop platform)",
            "type": "array",
            "description": "Sitemap or sitemap index of a shop, for example `https://shop.example.com/sitemap.xml`. Product pages found in it are opened and their schema.org `Product` markup (JSON-LD) is read. Works on any platform that prints that markup, which most do for Google.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "productPageUrls": {
            "title": "Product page URLs",
            "type": "array",
            "description": "Individual product pages to read (schema.org `Product` / `ProductGroup` JSON-LD). Use it for a small catalogue or to test a few pages.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "productUrlPattern": {
            "title": "Product URL pattern (sitemaps)",
            "type": "string",
            "description": "Regular expression that tells product pages apart from other pages in a sitemap. Default `/(products?|p|item|shop|dp)/`.",
            "default": "/(products?|p|item|shop|dp)/"
          },
          "sellerName": {
            "title": "Seller name",
            "type": "string",
            "description": "Your store's name as customers should see it. OpenAI requires `seller_name` on every row. When empty, the name is read from the feed title, the WooCommerce site name or the page's site name."
          },
          "brandFallback": {
            "title": "Brand for products without one",
            "type": "string",
            "description": "OpenAI requires `brand` on every row. Products that have a brand in the source keep it. For the rest this value is used; when it is empty the seller name is used and the row gets a warning."
          },
          "sellerUrl": {
            "title": "Store URL",
            "type": "string",
            "description": "Optional `seller_url`: your storefront's home page."
          },
          "returnPolicyUrl": {
            "title": "Return policy URL",
            "type": "string",
            "description": "Optional `return_policy`: public page with your return terms."
          },
          "returnDeadlineDays": {
            "title": "Return window (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. When set, every row gets `accepts_returns: true` and `return_deadline_in_days`. Leave 0 to leave returns unspecified.",
            "default": 0
          },
          "currency": {
            "title": "Currency when the source gives none",
            "type": "string",
            "description": "Three-letter ISO code, for example `USD`. Only used when a price has no currency code (a bare `19.99` or `$19.99`)."
          },
          "urlSuffix": {
            "title": "Tracking parameters for product links",
            "type": "string",
            "description": "Optional query string added to every product `url`, for example `utm_source=chatgpt.com&utm_medium=feed`. Parameters already on the link are kept."
          },
          "expandVariants": {
            "title": "One row per variant (WooCommerce)",
            "type": "boolean",
            "description": "OpenAI wants one row per purchasable variant, linked by `group_id` with the options in `variant_dict`. Turn off to write one row per product.",
            "default": true
          },
          "includeOutOfStock": {
            "title": "Include out-of-stock products",
            "type": "boolean",
            "description": "Out-of-stock products stay in the feed with `availability: out_of_stock` (recommended: OpenAI treats each upload as the full catalogue). Turn off to leave them out; they are then not charged.",
            "default": true
          },
          "maxItems": {
            "title": "Maximum products",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many product rows (for a test run). 0 = the whole catalogue. A capped file is not a full snapshot, so do not upload it as your live feed.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed for feed files. Turn on Apify Proxy if a store blocks requests from data centers.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}