{
  "openapi": "3.0.1",
  "info": {
    "title": "Crypto Arbitrage Scanner: Exchange Spreads on 20 Exchanges",
    "description": "Crypto arbitrage scanner: compare one coin's price on 20 exchanges (Binance, OKX, Kraken) and get the exchange spread after fees as Excel. No coding.",
    "version": "0.2",
    "x-build-id": "mkTxJbWwiDLNN2PuK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/alpine-data~crypto-spread-scanner/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-alpine-data-crypto-spread-scanner",
        "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/alpine-data~crypto-spread-scanner/runs": {
      "post": {
        "operationId": "runs-sync-alpine-data-crypto-spread-scanner",
        "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/alpine-data~crypto-spread-scanner/run-sync": {
      "post": {
        "operationId": "run-sync-alpine-data-crypto-spread-scanner",
        "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": {
          "baseAssets": {
            "title": "Which coins? (leave empty for all)",
            "type": "array",
            "description": "Coins to compare across exchanges. Example: BTC, ETH, SOL. Leave empty to scan every coin (thousands of pairs). Names and pairs also work: Bitcoin, eth, SOL/USDT.",
            "items": {
              "type": "string"
            }
          },
          "quoteAssets": {
            "title": "Priced in (quote currency)",
            "type": "array",
            "description": "The currency the coins are priced in. Example: USDT. Pick several to compare more pairs; a spread is only computed within the same quote currency.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "USDT",
                "USDC",
                "USD",
                "EUR",
                "BTC",
                "ETH",
                "FDUSD",
                "TRY",
                "KRW"
              ],
              "enumTitles": [
                "USDT (Tether), most pairs",
                "USDC",
                "USD",
                "EUR",
                "BTC",
                "ETH",
                "FDUSD",
                "TRY (Turkish lira)",
                "KRW (Korean won, Upbit/Bithumb)"
              ]
            },
            "default": [
              "USDT"
            ]
          },
          "minSpreadPct": {
            "title": "Minimum spread (%)",
            "minimum": 0,
            "type": "number",
            "description": "Only show price gaps of at least this size between the cheapest and the most expensive exchange. Example: 0.5 means 0.5%. Lower it (e.g. 0.1) for big coins like BTC, where gaps are small. Must be 0 or more.",
            "default": 0.5
          },
          "maxResults": {
            "title": "Max rows (cost limit)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The run stops after this many rows, so you never pay more than you expect. Example: 50 rows cost at most $0.0375 plus the $0.001 run fee.",
            "default": 200
          },
          "exchanges": {
            "title": "Exchanges",
            "type": "array",
            "description": "Exchanges to compare. Default: all 20. Example: Binance, OKX, Kraken. Names like 'Crypto.com', 'Huobi' or 'gate.io' are understood; unknown names are ignored, and if fewer than 2 remain, all exchanges are used.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "binance",
                "okx",
                "coinbase",
                "kraken",
                "bybit",
                "kucoin",
                "gate",
                "bitget",
                "htx",
                "mexc",
                "bitfinex",
                "bitstamp",
                "cryptocom",
                "bingx",
                "bitmart",
                "poloniex",
                "whitebit",
                "xt",
                "upbit",
                "bithumb"
              ],
              "enumTitles": [
                "Binance",
                "OKX",
                "Coinbase",
                "Kraken",
                "Bybit (via fallback if US-blocked)",
                "KuCoin",
                "Gate",
                "Bitget",
                "HTX (Huobi)",
                "MEXC",
                "Bitfinex",
                "Bitstamp",
                "Crypto.com",
                "BingX",
                "BitMart",
                "Poloniex",
                "WhiteBIT",
                "XT.com",
                "Upbit (KRW/USDT/BTC)",
                "Bithumb (KRW)"
              ]
            },
            "default": [
              "binance",
              "okx",
              "coinbase",
              "kraken",
              "bybit",
              "kucoin",
              "gate",
              "bitget",
              "htx",
              "mexc",
              "bitfinex",
              "bitstamp",
              "cryptocom",
              "bingx",
              "bitmart",
              "poloniex",
              "whitebit",
              "xt",
              "upbit",
              "bithumb"
            ]
          },
          "takerFeePctPerSide": {
            "title": "Trading fee per trade (%)",
            "minimum": 0,
            "maximum": 2,
            "type": "number",
            "description": "Your taker fee per buy or sell, used to estimate the net spread (net = gross spread − 2 × fee). Example: 0.1 for 0.1%.",
            "default": 0.1
          },
          "minNetSpreadPct": {
            "title": "Minimum net spread after fees (%)",
            "type": "number",
            "description": "Optional. Only show spreads that are still at least this big after trading fees. Example: 0.3. Leave empty to show all."
          },
          "minQuoteVolume24h": {
            "title": "Minimum 24h volume per exchange",
            "minimum": 0,
            "type": "integer",
            "description": "Ignore markets that trade less than this in 24 hours (in the quote currency, e.g. USDT). Example: 50000. Thin markets show fake spreads that you cannot trade.",
            "default": 50000
          },
          "checkTransferStatus": {
            "title": "Check deposit / withdrawal status",
            "type": "boolean",
            "description": "Shows whether you can withdraw the coin from the buy exchange and deposit it on the sell exchange (where the exchange publishes this). Example: on.",
            "default": true
          },
          "onlyTransferable": {
            "title": "Only coins that can be moved",
            "type": "boolean",
            "description": "On by default: hides spreads where withdrawals on the buy exchange or deposits on the sell exchange are closed, because you cannot act on them. Spreads on exchanges that do not publish their transfer status are kept (transferable = empty). Switch off to see all spreads.",
            "default": true
          },
          "onlyConfirmedTransferable": {
            "title": "Only coins with confirmed open transfers",
            "type": "boolean",
            "description": "Stricter: also hides spreads where an exchange does not publish its withdrawal/deposit status (only Gate, KuCoin, Bitget, HTX, Poloniex, WhiteBIT and XT publish it). Example: off.",
            "default": false
          },
          "maxSpreadPct": {
            "title": "Maximum plausible spread (%)",
            "minimum": 0,
            "type": "number",
            "description": "Bigger gaps are almost always two different tokens with the same ticker, so they are hidden. Example: 20.",
            "default": 20
          },
          "includeSuspicious": {
            "title": "Show suspicious spreads too",
            "type": "boolean",
            "description": "Also show spreads above the maximum (flagged as suspectedDifferentAsset). Example: off.",
            "default": false
          },
          "includeLeveragedTokens": {
            "title": "Include leveraged tokens (3L/3S…)",
            "type": "boolean",
            "description": "Leveraged tokens are different products on each exchange, so they are hidden by default. Example: off.",
            "default": false
          },
          "minSpread": {
            "title": "Minimum spread (%), old name (API only)",
            "minimum": 0,
            "type": "number",
            "description": "Old name of 'Minimum spread (%)' (minSpreadPct), kept for existing API inputs. If present, it takes precedence over minSpreadPct. Must be 0 or more."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}