{
  "openapi": "3.0.1",
  "info": {
    "title": "Hermes Birkin/Kelly & Chanel Classic Cross-Platform Arbitrage",
    "description": "Find resale spread candidates for Hermes Birkin/Kelly and Chanel Classic Flap across Vestiaire, Rebag, Fashionphile, and 1stDibs. Normalize condition, size, material, hardware, price, and estimated ROI for daily sourcing workflows.",
    "version": "0.0",
    "x-build-id": "RMbrMk3wxP2EZx7cU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kazkn~hermes-birkin-kelly-arbitrage/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kazkn-hermes-birkin-kelly-arbitrage",
        "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/kazkn~hermes-birkin-kelly-arbitrage/runs": {
      "post": {
        "operationId": "runs-sync-kazkn-hermes-birkin-kelly-arbitrage",
        "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/kazkn~hermes-birkin-kelly-arbitrage/run-sync": {
      "post": {
        "operationId": "run-sync-kazkn-hermes-birkin-kelly-arbitrage",
        "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": {
          "platforms": {
            "title": "🛍️ Marketplaces to scan",
            "uniqueItems": true,
            "type": "array",
            "description": "Pick the resale platforms to compare. Start with all four for cross-platform spreads, or narrow the scan while testing.",
            "items": {
              "type": "string",
              "enum": [
                "vestiaire",
                "rebag",
                "fashionphile",
                "1stdibs"
              ],
              "enumTitles": [
                "🟣 Vestiaire Collective",
                "👜 Rebag",
                "💼 Fashionphile",
                "🏛️ 1stDibs"
              ]
            }
          },
          "models": {
            "title": "👜 Bag models",
            "uniqueItems": true,
            "type": "array",
            "description": "Choose the bag families to scan when no strict watchlist is provided.",
            "items": {
              "type": "string",
              "enum": [
                "birkin",
                "kelly",
                "classic_flap"
              ],
              "enumTitles": [
                "💎 Birkin",
                "🔒 Kelly",
                "🖤 Chanel Classic Flap"
              ]
            }
          },
          "watchlistMode": {
            "title": "🎯 Targeting mode",
            "enum": [
              "broad_scan",
              "strict_target"
            ],
            "type": "string",
            "description": "Broad scan searches all selected model families. Strict target limits the scan to the simple fields below.",
            "default": "broad_scan"
          },
          "watchlistModel": {
            "title": "👜 Target model",
            "enum": [
              "birkin",
              "kelly",
              "classic_flap"
            ],
            "type": "string",
            "description": "Used only when targeting mode is Strict target.",
            "default": "birkin"
          },
          "watchlistSize": {
            "title": "📏 Target size (optional)",
            "type": "string",
            "description": "Optional. Examples: 25, 28, 30, 32, 35, mini, small, medium, jumbo."
          },
          "watchlistColor": {
            "title": "🎨 Target color (optional)",
            "type": "string",
            "description": "Optional. Examples: black, noir, etoupe, gold, biscuit."
          },
          "watchlistMaterial": {
            "title": "🧵 Target leather/material (optional)",
            "type": "string",
            "description": "Optional. Examples: togo, epsom, clemence, swift, lambskin, caviar, calfskin."
          },
          "watchlistHardware": {
            "title": "✨ Target hardware (optional)",
            "type": "string",
            "description": "Optional. Examples: gold, GHW, palladium, PHW, rose gold, permabrass."
          },
          "watchlistConditionMin": {
            "title": "✅ Minimum condition (optional)",
            "enum": [
              "new_or_never_worn",
              "excellent",
              "very_good",
              "good",
              "fair"
            ],
            "type": "string",
            "description": "Optional. Lowest condition accepted for the strict target."
          },
          "watchlistKeywordsText": {
            "title": "🔎 Extra keywords (optional)",
            "type": "string",
            "description": "Optional. Separate terms with commas or new lines. Examples: sellier, retourne, special order, GHW."
          },
          "maxListingsPerPlatform": {
            "title": "🧮 Max listings per marketplace",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Hard cap on normalized listings collected from each selected marketplace. Lower values keep private smoke runs cheap.",
            "default": 60
          },
          "maxPagesPerPlatform": {
            "title": "📄 Max pages per marketplace",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum result pages requested per marketplace and query.",
            "default": 4
          },
          "minSpreadPercent": {
            "title": "💰 Minimum price gap before costs %",
            "minimum": 0,
            "maximum": 500,
            "type": "number",
            "description": "First gate. Example: buy at $10,000 and compare against a $12,000 listing = 20% price gap before costs.",
            "default": 12
          },
          "minNetRoiPercent": {
            "title": "📈 Minimum profit after costs %",
            "minimum": 0,
            "maximum": 500,
            "type": "number",
            "description": "Second gate. Estimated profit after fees and costs divided by landed buy cost. Example: $1,000 profit on $10,000 landed cost = 10%.",
            "default": 8
          },
          "shippingEstimate": {
            "title": "🚚 Shipping/insurance estimate (optional)",
            "minimum": 0,
            "maximum": 100000,
            "type": "number",
            "description": "Estimated fixed shipping, insurance, or handling cost added to the buy price for each potential deal.",
            "default": 150
          },
          "repairBuffer": {
            "title": "🧼 Repair/authentication buffer (optional)",
            "minimum": 0,
            "maximum": 100000,
            "type": "number",
            "description": "Extra fixed safety buffer for cleaning, repair, authentication, photography, or prep before resale.",
            "default": 250
          },
          "fxBufferPercent": {
            "title": "🌍 FX/tax buffer % (optional)",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "Extra percentage added to landed buy cost for FX slippage, import friction, or taxes not already included.",
            "default": 2
          },
          "rebagCommissionPercent": {
            "title": "👜 Rebag estimated commission % (optional)",
            "minimum": 0,
            "maximum": 99.99,
            "type": "number",
            "description": "Rebag commissions are quote-specific, so this is your assumption for Rebag-as-sell-channel ROI. Official guidance says many items land around 15-25%, with some as low as 8%.",
            "default": 20
          },
          "firstDibsCommissionPercent": {
            "title": "🏛️ 1stDibs estimated commission % (optional)",
            "minimum": 0,
            "maximum": 99.99,
            "type": "number",
            "description": "1stDibs commissions depend on seller plan, category, price, and business type. Use your own seller-plan estimate here.",
            "default": 20
          },
          "includeUnmatchedListings": {
            "title": "🧾 Include unmatched listings",
            "type": "boolean",
            "description": "Emit listings that cannot be placed in a strict cross-platform match group.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy settings",
            "type": "object",
            "description": "Optional. Disabled by default because these marketplaces often work better with direct requests. Enable Apify Proxy only if your run is blocked."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}