{
  "openapi": "3.0.1",
  "info": {
    "title": "KONEPS Bid Notice Change Detector",
    "description": "나라장터(KONEPS) 입찰공고의 신규·정정·삭제 변경만 감지해 알려주는 모니터링 Actor. 공식 무료 data.go.kr API(BYOK), 스케줄 실행, 웹훅, 데모 모드. Detects new, updated and removed bid notices on Korea's KONEPS procurement portal via the official free data.go.kr API. Snapshot diff per run; webhook alerts; demo mode without API key.",
    "version": "0.1",
    "x-build-id": "bE02tXJ9hK8o3bmR3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/honjahoesa~koneps-bid-change-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-honjahoesa-koneps-bid-change-detector",
        "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/honjahoesa~koneps-bid-change-detector/runs": {
      "post": {
        "operationId": "runs-sync-honjahoesa-koneps-bid-change-detector",
        "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/honjahoesa~koneps-bid-change-detector/run-sync": {
      "post": {
        "operationId": "run-sync-honjahoesa-koneps-bid-change-detector",
        "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": {
          "serviceKey": {
            "title": "data.go.kr API 키 / service key",
            "type": "string",
            "description": "공공데이터포털 무료 키 (조달청_나라장터 입찰공고정보서비스, 자동 즉시 승인·무료). 발급: https://www.data.go.kr/data/15129394/openapi.do — 데모 모드에서는 불필요. Your free data.go.kr API key (instant auto-approval, no cost). Not needed in demo mode."
          },
          "keyword": {
            "title": "키워드 필터 (공고명) / Keyword filter",
            "type": "string",
            "description": "선택. 공고명에 이 텍스트가 포함된 공고만 추적 (예: 소프트웨어, 유지보수). 비우면 전체. Optional: only notices whose title contains this text."
          },
          "agency": {
            "title": "기관 필터 (공고기관명) / Agency filter",
            "type": "string",
            "description": "선택. 기관명에 이 텍스트가 포함된 공고만 추적 (예: 한국전력). Optional: only notices from agencies matching this text."
          },
          "types": {
            "title": "조달 분야 / Procurement types",
            "type": "array",
            "description": "조회할 나라장터 분야 선택. Which KONEPS categories to check.",
            "items": {
              "type": "string",
              "enum": [
                "servc",
                "thng",
                "cnstwk"
              ],
              "enumTitles": [
                "용역 (Services)",
                "물품 (Goods)",
                "공사 (Construction)"
              ]
            },
            "default": [
              "servc",
              "thng",
              "cnstwk"
            ]
          },
          "dateWindowHours": {
            "title": "조회 기간 (시간) / Look-back window (hours)",
            "minimum": 1,
            "maximum": 720,
            "type": "integer",
            "description": "지금부터 몇 시간 전까지의 공고를 조회할지 (공고일시 기준). 스케줄 간격보다 약간 길게 설정 권장. 1-720. How far back to query; keep it a bit longer than your schedule interval.",
            "default": 48
          },
          "webhookUrl": {
            "title": "웹훅 URL (선택) / Webhook URL (optional)",
            "type": "string",
            "description": "선택. 변경 발견 시 JSON 요약을 POST할 HTTPS 주소. Optional HTTPS URL that receives a JSON summary when changes are found."
          },
          "testMode": {
            "title": "데모 모드 (키 불필요) / Demo mode (no API key)",
            "type": "boolean",
            "description": "번들 샘플 데이터로 전체 흐름을 체험 (실제 API 호출 없음, DEMO 표기). 키 입력 후에는 OFF로 전환하세요. Try the full flow with bundled sample data; turn OFF after adding your key.",
            "default": true
          },
          "apiBaseUrl": {
            "title": "API base URL (advanced)",
            "type": "string",
            "description": "Advanced: override the official API base URL, e.g. for testing against a mock server.",
            "default": "https://apis.data.go.kr/1230000/ad/BidPublicInfoService"
          },
          "maxPagesPerType": {
            "title": "분야당 최대 페이지 / Max pages per category",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "분야당 조회 페이지 상한 (페이지당 100건). 무료 일일 쿼터(1,000회) 보호용. 초과 시 해당 분야는 불완전 처리되어 삭제 판정을 하지 않습니다. Safety cap protecting your free daily quota; exceeding categories are marked incomplete with no REMOVED judgment.",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}