{
  "openapi": "3.0.1",
  "info": {
    "title": "Hong Kong Jockey Club (HKJC) Comprehensive Racing Data Scraper",
    "description": "The definitive data solution for Hong Kong horse racing. Effortlessly extract comprehensive datasets including Odds Snapshots, Pre Race Analysis, Race Results, Barrier Trials, Veterinary history, and Official Incident Reports. Engineered for high-speed performance and clean JSON output.",
    "version": "0.1",
    "x-build-id": "jXuNoJ4NOI0GC8osh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/alaricus~hkjc-comprehensive-racing-data/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-alaricus-hkjc-comprehensive-racing-data",
        "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/alaricus~hkjc-comprehensive-racing-data/runs": {
      "post": {
        "operationId": "runs-sync-alaricus-hkjc-comprehensive-racing-data",
        "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/alaricus~hkjc-comprehensive-racing-data/run-sync": {
      "post": {
        "operationId": "run-sync-alaricus-hkjc-comprehensive-racing-data",
        "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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Select Scrape Mode",
            "type": "string",
            "description": "Choose which section of the HKJC website you want to scrape data from.",
            "default": "result"
          },
          "results_section": {
            "title": "Results Configuration",
            "type": "string",
            "description": "Configure the parameters for scraping Race Results."
          },
          "all_result_dates": {
            "title": "Scrape ALL available Result dates",
            "type": "boolean",
            "description": "Check this to automatically fetch every date currently available on the HKJC website.",
            "default": false
          },
          "result_dates": {
            "title": "Specific Result Dates (YYYY-MM-DD)",
            "type": "array",
            "description": "Only used if 'Scrape ALL' is unchecked. Enter dates in YYYY-MM-DD format.",
            "items": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"
            }
          },
          "result_race_numbers": {
            "title": "Race Numbers",
            "type": "array",
            "description": "Optional: Enter specific race numbers (e.g., 1, 2). Leave empty to scrape ALL races for the selected dates.",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 15
            }
          },
          "report_section": {
            "title": "Report Configuration",
            "type": "string",
            "description": "Configure the parameters for scraping Incident Reports."
          },
          "all_report_dates": {
            "title": "Scrape ALL available Report dates",
            "type": "boolean",
            "description": "Check this to fetch all historical incident reports available on the HKJC website.",
            "default": false
          },
          "report_dates": {
            "title": "Specific Report Dates (YYYY-MM-DD)",
            "type": "array",
            "description": "Specify exact dates for incident reports. Only used if 'Scrape ALL' is unchecked.",
            "items": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"
            }
          },
          "barrier_section": {
            "title": "Barrier Trial Configuration",
            "type": "string",
            "description": "Configure the parameters for scraping Barrier Trials."
          },
          "all_barrier_dates": {
            "title": "Scrape ALL available Trial dates",
            "type": "boolean",
            "description": "Check this to fetch all historical barrier trial results available.",
            "default": false
          },
          "barrier_dates": {
            "title": "Specific Barrier Dates (YYYY-MM-DD)",
            "type": "array",
            "description": "Specify exact trial dates. Only used if 'Scrape ALL' is unchecked.",
            "items": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"
            }
          },
          "vet_section": {
            "title": "Veterinary Settings",
            "type": "string",
            "description": "Configure the parameters for scraping Veterinary Records."
          },
          "get_starters": {
            "title": "Scrape Today's Starters",
            "type": "boolean",
            "description": "Fetch veterinary records for horses declared to start in upcoming races.",
            "default": false
          },
          "get_full_database": {
            "title": "Search Historical Database",
            "type": "boolean",
            "description": "Search the comprehensive historical veterinary database. Often used with Brand Numbers.",
            "default": false
          },
          "brand_numbers": {
            "title": "Target Brand Numbers",
            "type": "array",
            "description": "Specific horse brand numbers to look up (e.g., 'E123', 'G456'). Leave empty to fetch all.",
            "items": {
              "type": "string"
            }
          },
          "prerace_section": {
            "title": "Pre-Race Configuration",
            "type": "string",
            "description": "Configure the parameters for scraping Pre-Race Analysis."
          },
          "prerace_race_numbers": {
            "title": "Pre-Race Race Numbers",
            "type": "array",
            "description": "Optional: Enter specific race numbers (e.g., 1, 2). Leave empty to scrape ALL races for the next race meeting.",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 15
            }
          },
          "snapshot_section": {
            "title": "Odds Snapshot Configuration",
            "type": "string",
            "description": "Configure the parameters for extracting Odds Snapshots."
          },
          "all_snapshots": {
            "title": "Fetch ALL available Snapshots",
            "type": "boolean",
            "description": "Fetch ALL snapshots from the database for all dates and all races available",
            "default": true
          },
          "snapshot_dates": {
            "title": "Specific Snapshot Dates (YYYY-MM-DD)",
            "type": "array",
            "description": "Specify exact snapshot dates. Only used if 'Fetch ALL' is unchecked.",
            "items": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"
            }
          },
          "snapshot_race_numbers": {
            "title": "Snapshot Race Numbers",
            "type": "array",
            "description": "Optional: Enter specific race numbers (e.g., 1, 2). Leave empty to fetch ALL races for the selected dates.",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 15
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}