{
  "openapi": "3.0.1",
  "info": {
    "title": "Gulf Government Tenders — Saudi, Qatar, Oman & Jordan",
    "description": "Open government tenders from Etimad (Saudi Arabia), Monaqasat (Qatar), the Oman Tender Board and JONEPS (Jordan) in one JSON schema. Arabic-safe keyword search, deadlines in ISO, fees in local currency, optional award results with bidders and prices.",
    "version": "0.1",
    "x-build-id": "FXgt9jg119cETnmU3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dottti~gulf-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dottti-gulf-tenders",
        "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/dottti~gulf-tenders/runs": {
      "post": {
        "operationId": "runs-sync-dottti-gulf-tenders",
        "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/dottti~gulf-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-dottti-gulf-tenders",
        "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": {
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Portals to search. They run one after another. If one portal is down, the run logs it and continues with the others.",
            "items": {
              "type": "string",
              "enum": [
                "SA",
                "QA",
                "OM",
                "JO"
              ],
              "enumTitles": [
                "Saudi Arabia (Etimad)",
                "Qatar (Monaqasat)",
                "Oman (Tender Board)",
                "Jordan (JONEPS)"
              ]
            },
            "default": [
              "SA",
              "QA",
              "OM",
              "JO"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words to find in the tender title, buyer, category or number. Arabic and English both work. Arabic spelling variants match each other: أ/إ/آ/ا, ة/ه, ى/ي, Persian ی and ک, diacritics and tatweel. Leave empty for all tenders.",
            "items": {
              "type": "string"
            }
          },
          "matchMode": {
            "title": "Keyword match mode",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "any: keep a tender when at least one keyword matches. all: keep it only when every keyword matches.",
            "default": "any"
          },
          "entityContains": {
            "title": "Buyer name contains",
            "type": "string",
            "description": "Keep only tenders whose government entity contains this text. Example: وزارة الصحة or Ministry. Matched with the same Arabic spelling rules as keywords."
          },
          "onlyOpen": {
            "title": "Only tenders still open for offers",
            "type": "boolean",
            "description": "Drop tenders whose submission deadline has passed.",
            "default": true
          },
          "publishedWithinDays": {
            "title": "Published within the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only tenders published in the last N days. Leave empty for no limit. For Oman this needs the tender notice, so each candidate costs one extra request."
          },
          "maxItemsPerCountry": {
            "title": "Maximum tenders per country",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Cap on tenders delivered from each portal.",
            "default": 10
          },
          "maxItems": {
            "title": "Maximum tenders in total",
            "minimum": 1,
            "maximum": 40000,
            "type": "integer",
            "description": "Cap on tenders across all countries. You pay per tender delivered, so this is your tender cost cap. Award records have their own cap below.",
            "default": 200
          },
          "includeDetails": {
            "title": "Open each tender's detail page (Oman and Jordan)",
            "type": "boolean",
            "description": "Gives Jordan its document fee, English title and exact deadline time, and Oman its publish date, English title and exact deadline time. Costs one extra request per tender in Oman and three in Jordan, so runs take longer.",
            "default": true
          },
          "includeAwards": {
            "title": "Add award results",
            "type": "boolean",
            "description": "Also return award records. Saudi Arabia: winners, bidders and prices for tenders whose deadline was 30 to 120 days ago. Qatar: the latest awarded tenders with every bidder and price. Oman: bid-opening reports with every bid. Jordan publishes no award results.",
            "default": false
          },
          "maxAwardsPerCountry": {
            "title": "Maximum award records per country",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on award records from each of Saudi Arabia, Qatar and Oman.",
            "default": 20
          },
          "maxPagesPerCountry": {
            "title": "Maximum list pages per country",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stops scanning a portal after this many list pages. Keeps runs short when narrow keywords match few tenders. Page sizes: Etimad 24, Monaqasat 20, Oman 50, JONEPS 100.",
            "default": 20
          },
          "requestDelayMs": {
            "title": "Delay between requests to one portal (ms)",
            "minimum": 1000,
            "maximum": 15000,
            "type": "integer",
            "description": "Minimum gap between two requests to the same portal. Never below 1000 ms.",
            "default": 1000
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries with exponential backoff on timeouts, HTTP 429 and 5xx.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}