{
  "openapi": "3.0.1",
  "info": {
    "title": "Santa Fe Tenders Scraper & Monitor",
    "description": "Scrape and monitor every public tender of the Province of Santa Fe, Argentina: licitaciones, concursos, contrataciones directas of ministries and hospitals with buyer, budget, deadlines, rubros, expediente and pliego/circular/acta PDF links. Delta mode for new, status-changed and amended tenders.",
    "version": "2.0",
    "x-build-id": "c502RbdIJ3tHJAgi3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/stefano_seggio~santafe-compras-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-stefano_seggio-santafe-compras-monitor",
        "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/stefano_seggio~santafe-compras-monitor/runs": {
      "post": {
        "operationId": "runs-sync-stefano_seggio-santafe-compras-monitor",
        "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/stefano_seggio~santafe-compras-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-stefano_seggio-santafe-compras-monitor",
        "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": {
          "estados": {
            "title": "Estados (process states)",
            "minItems": 1,
            "type": "array",
            "description": "Which lists to read. AP = Para Apertura (published, offers not yet opened - where every new tender appears first), ET = En Trámite (opened, being evaluated - actas and preadjudicación land here), CO = Concluida (finished). Each is a separate server-side query.",
            "items": {
              "type": "string",
              "enum": [
                "AP",
                "ET",
                "CO"
              ],
              "enumTitles": [
                "AP - Para Apertura (upcoming openings)",
                "ET - En Trámite (in progress)",
                "CO - Concluida (concluded)"
              ]
            },
            "default": [
              "AP"
            ]
          },
          "anio": {
            "title": "Year (año)",
            "minimum": 2000,
            "maximum": 2100,
            "type": "integer",
            "description": "Year of the process number (anioGestion). The site's own UI always applies the current year; leave empty for all years (2000 onwards)."
          },
          "objeto": {
            "title": "Subject contains (objeto)",
            "type": "string",
            "description": "Case-insensitive phrase search over the tender subject, e.g. 'limpieza', 'medicamentos', 'servicio de vigilancia'. Word order matters ('servicio de limpieza' matches, 'limpieza servicio' does not)."
          },
          "tipoGestion": {
            "title": "Procedure types (tipo de gestión)",
            "type": "array",
            "description": "One server-side query per selected type. Codes are the site's own (L = Licitación Pública, P = Licitación Privada, T = Contratación Directa, ...).",
            "items": {
              "type": "string",
              "enum": [
                "L",
                "P",
                "A",
                "T",
                "B",
                "V",
                "C",
                "I",
                "D",
                "S",
                "X",
                "Y",
                "O"
              ],
              "enumTitles": [
                "L - Licitación Pública",
                "P - Licitación Privada",
                "A - Licitación Acelerada",
                "T - Contratación Directa",
                "B - Concurso Público",
                "V - Concurso Privado",
                "C - Concurso de Precios",
                "I - Concursos de Proyectos Integrales",
                "D - Gestión Directa",
                "S - Subasta o Remate Público",
                "X - Procedimiento Competitivo Ágil",
                "Y - Entes Portuarios - Contrataciones",
                "O - Otros"
              ]
            },
            "default": []
          },
          "tipoModalidad": {
            "title": "Modality (tipo de modalidad)",
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "9999"
            ],
            "type": "string",
            "description": "Contracting modality code from the site."
          },
          "comprador": {
            "title": "Buyer (organismo licitante)",
            "type": "string",
            "description": "The organism running the procedure, as its site id (idOrganismoLey12510, e.g. 27) or a distinctive part of its name (e.g. 'Administración Provincial de Impuestos', 'Hospital Cullen'). Names are matched against the site's own organism list at run start; an ambiguous name fails with the candidates listed."
          },
          "solicitante": {
            "title": "Requesting body (organismo comitente)",
            "type": "string",
            "description": "The organism the purchase is for, same id space and name matching as 'Buyer' (e.g. 'Ministerio de Salud')."
          },
          "rubro": {
            "title": "Category (rubro)",
            "type": "string",
            "description": "Product/service category, as the site's idEspecie (e.g. 29) or part of its name (e.g. 'medicinales', 'limpieza', 'alimentos'). Matched against the site's 78 rubros at run start."
          },
          "subrubro": {
            "title": "Sub-category (subrubro)",
            "type": "string",
            "description": "Sub-category within the selected rubro, as idFamilia or part of its name. Requires 'Category (rubro)'."
          },
          "nroGestion": {
            "title": "Process number (nro. de gestión)",
            "pattern": "^[A-Za-z0-9/-]{1,20}$",
            "type": "string",
            "description": "Exact process number as printed on the site, e.g. '18' or '02' (combine with the year: several organisms share the same numbering)."
          },
          "nroExpediente": {
            "title": "File number (nro. de expediente)",
            "pattern": "^[A-Za-z0-9#/. -]{1,60}$",
            "type": "string",
            "description": "Exact, full expediente number, e.g. 'EE-2026-00001797-APPSF-OD' (partial values match nothing on the site)."
          },
          "openingFrom": {
            "title": "Opening date from",
            "type": "string",
            "description": "Only tenders whose bid opening (fecha de apertura) is on or after this date. Absolute (2026-09-01) or relative: '7 days' counts back from today, '+7 days' counts forward (Santa Fe calendar). Applied client-side after fetching the listing (the site has no date filter) - rows outside the window are simply skipped and not remembered."
          },
          "openingTo": {
            "title": "Opening date to",
            "type": "string",
            "description": "Only tenders opening on or before this date. Absolute or relative ('+30 days' = opening within the next month). Client-side."
          },
          "eventTypes": {
            "title": "Event types to deliver",
            "type": "array",
            "description": "NEW_LISTING = a process never delivered before; STATUS_CHANGE = a known process that moved to another estado (AP -> ET -> CO); UPDATED = a known open process whose detail page changed (a circular aclaratoria, an acta de apertura, a preadjudicación report, a new opening date...). The last two exist in delta mode only.",
            "items": {
              "type": "string",
              "enum": [
                "NEW_LISTING",
                "STATUS_CHANGE",
                "UPDATED"
              ],
              "enumTitles": [
                "New tenders",
                "Status changes (AP -> ET -> CO)",
                "Amendments to known tenders"
              ]
            },
            "default": [
              "NEW_LISTING",
              "STATUS_CHANGE",
              "UPDATED"
            ]
          },
          "onlyNew": {
            "title": "Only new / changed since the last run",
            "type": "boolean",
            "description": "Remembers every process it has delivered (per filter set, in a named key-value store) with the estado it was in and a fingerprint of its detail page, and returns only processes that are new, moved to another estado, or were amended since. Each estado list is walked newest-first and stops as soon as it reaches already-known records.",
            "default": false
          },
          "recheckWindowDays": {
            "title": "Amendment re-check window (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Delta mode with detail: known processes whose opening date is within this many days in the past (or any time in the future) get their detail page re-read every run to detect amendments (UPDATED). The register shows no 'last modified' signal, so this re-read is the only way to see a new circular or acta. 0 disables it. Re-reads are not charged unless something changed.",
            "default": 30
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "newest",
              "openingSoonest",
              "openingLatest",
              "mostViewed"
            ],
            "type": "string",
            "description": "'newest' (idGestion descending = most recently created first) is required for delta mode. 'openingSoonest' / 'openingLatest' order by bid-opening date; 'mostViewed' by the site's own view counter (full runs only).",
            "default": "newest"
          },
          "deltaStateName": {
            "title": "Delta state name",
            "pattern": "^[A-Za-z0-9-]{1,30}$",
            "type": "string",
            "description": "Optional label for the memory of a monitoring task. Defaults to a fingerprint of your filters, so different schedules never interfere. Set the same name on two tasks to make them share one memory."
          },
          "resetState": {
            "title": "Reset delta memory before this run",
            "type": "boolean",
            "description": "Forget every previously delivered process for this delta state and re-baseline (the run then returns up to 'Max records' newest processes).",
            "default": false
          },
          "maxItems": {
            "title": "Max records per run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on delivered records (and therefore on cost: you pay per record). In delta mode anything beyond the cap is simply delivered by the next run.",
            "default": 100
          },
          "fetchDetail": {
            "title": "Fetch full detail per process",
            "type": "boolean",
            "description": "Opens each process page (one extra request) for the publication timestamp, budget (Monto Original), submission deadline, places, rubros, requesting organism, contact, expediente and the pliego / circular / acta / preadjudicación document links. Off = listing-only summary records (cheaper 'result-summary' price; no UPDATED detection and no status sweep).",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel detail requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many process pages are fetched at once. The site answers a page in 0.1-0.3 s and tolerated 10 in parallel without throttling; 5 is a polite default.",
            "default": 5
          },
          "dateRange": {
            "title": "Legacy recency preset (deprecated - use 'Opening date from / to')",
            "pattern": "^(24h|7d|30d)$",
            "type": "string",
            "description": "Kept for tasks created with version 1: '24h', '7d' or '30d' are interpreted as an opening-date window of that many days before AND after today."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}