{
  "openapi": "3.0.1",
  "info": {
    "title": "VDAB Job Scraper - Belgium Flanders Vacancies & Employers",
    "description": "From $0.50 per 1,000 vacancies. Scrape VDAB, Flanders' public employment service: all 207,809 live Belgian vacancies by keyword, city, radius, region, job domain, contract, diploma, licence. Optional detail adds employer website, named hiring contact, apply/ATS URL. New-vacancy monitor + alerts.",
    "version": "0.1",
    "x-build-id": "A0oYW80rMfcgyu9m4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~vdab-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-vdab-jobs-scraper",
        "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/scrapersdelight~vdab-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-vdab-jobs-scraper",
        "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/scrapersdelight~vdab-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-vdab-jobs-scraper",
        "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": {
          "startUrls": {
            "title": "VDAB search URLs",
            "type": "array",
            "description": "Paste any vdab.be search URL - e.g. https://www.vdab.be/vindeenjob/vacatures?trefwoord=verpleegkundige&locatie=Gent&afstand=25 - and every filter in its query string is applied. A single-vacancy URL (https://www.vdab.be/vindeenjob/vacatures/74494729) scrapes just that vacancy - with the full detail fields when 'Fetch full detail' is on (billed as one detail fetch), and listing-level fields only, with no detail charge, when it is off (measured 2026-09-06, run BlNkHJhfYYNcEiteo: 10 vacancy URLs, detail off, 0 detail events billed); if VDAB answers 404 for it the run finishes clean and says the vacancy id does not exist or has been taken offline, rather than reporting an empty search. Leave empty to use the filter fields below.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchTerms": {
            "title": "Keywords",
            "type": "array",
            "description": "Free-text keywords, exactly as you would type them into VDAB's own search box (Dutch works best: 'verpleegkundige', 'boekhouder', 'heftruckchauffeur'). One crawl runs per keyword and the results are merged and de-duplicated.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location (city or postcode)",
            "type": "string",
            "description": "Flemish/Brussels city name or postcode - 'Antwerpen', 'Gent', '9000'. Combine with the search radius below. MEASURED 2026-09-06: Antwerpen +5 km returns 12,719 vacancies, Antwerpen +10 km 18,227, Hasselt +5 km 4,210, postcode 9000 +10 km 16,247."
          },
          "radiusKm": {
            "title": "Search radius (km)",
            "minimum": 1,
            "maximum": 150,
            "type": "integer",
            "description": "Radius in kilometres around the location (or around the latitude/longitude below). Ignored when neither is set.",
            "default": 25
          },
          "latitude": {
            "title": "Latitude",
            "type": "string",
            "description": "Latitude for a geo-radius search, e.g. 51.05 (Gent). Use together with Longitude and the radius. Overrides nothing — it is simply an alternative to the city field."
          },
          "longitude": {
            "title": "Longitude",
            "type": "string",
            "description": "Longitude for a geo-radius search, e.g. 3.72 (Gent). MEASURED 2026-09-06: 51.05 / 3.72 at 25 km returns 33,914 vacancies."
          },
          "regionCodes": {
            "title": "VDAB region codes",
            "type": "array",
            "description": "VDAB employment-region codes, e.g. 'BE231A' (Regio Aalst - 2,952 vacancies measured 2026-09-06). The API takes one region per query, so several codes are run as several crawls and merged. Region codes appear on every detail row as workRegionCode, so one detail run tells you the codes you want.",
            "items": {
              "type": "string"
            }
          },
          "jobDomains": {
            "title": "Job domains",
            "type": "array",
            "description": "VDAB's 24 top-level job domains. Live vacancy counts measured 2026-09-06: Techniek 75,352, Bouw 36,053, Productie 35,571, Logistiek en transport 29,878, Verkoop 22,844, Administratie 16,462, Management 11,866, Financieel 8,845, Gezondheid 6,308, ICT 3,604.",
            "items": {
              "type": "string",
              "enum": [
                "JOBCAT01",
                "JOBCAT02",
                "JOBCAT03",
                "JOBCAT04",
                "JOBCAT05",
                "JOBCAT14",
                "JOBCAT06",
                "JOBCAT07",
                "JOBCAT08",
                "JOBCAT09",
                "JOBCAT10",
                "JOBCAT11",
                "JOBCAT12",
                "JOBCAT13",
                "JOBCAT15",
                "JOBCAT16",
                "JOBCAT17",
                "JOBCAT18",
                "JOBCAT20",
                "JOBCAT19",
                "JOBCAT21",
                "JOBCAT22",
                "JOBCAT23",
                "JOBCAT24"
              ],
              "enumTitles": [
                "Aankoop (purchasing)",
                "Administratie (admin)",
                "Bouw (construction)",
                "Communicatie",
                "Creatief",
                "Dienstverlening (services)",
                "Financieel (finance)",
                "Gezondheid (healthcare)",
                "Horeca en toerisme",
                "Human resources",
                "ICT",
                "Juridisch (legal)",
                "Land- en tuinbouw (agri)",
                "Logistiek en transport",
                "Management",
                "Marketing",
                "Onderhoud (maintenance)",
                "Onderwijs (education)",
                "Onderzoek en ontwikkeling (R&D)",
                "Overheid (public sector)",
                "Productie (production)",
                "Techniek (technical)",
                "Verkoop (sales)",
                "Andere (other)"
              ]
            }
          },
          "occupationIds": {
            "title": "Occupation IDs (beroep)",
            "type": "array",
            "description": "VDAB occupation UUIDs for a precise job title, e.g. cee9ee58-43a9-4300-b6c4-8bf1f7b59c28 = Verpleegkundige (2,498 vacancies measured 2026-09-06). All 30 shortage occupations and their UUIDs are listed in this Actor's README with the same-day counts.",
            "items": {
              "type": "string"
            }
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "VDAB contract categories. Live vacancy counts measured 2026-09-06: Tijdelijk met optie vast 112,178, Vaste jobs 84,226, Tijdelijke jobs 6,110, Zelfstandige activiteit 2,060, Flexijob 2,034, Studentenjobs 1,343, Dienstenchequebaan 995.",
            "items": {
              "type": "string",
              "enum": [
                "8",
                "5",
                "4",
                "18",
                "7",
                "6",
                "15",
                "2",
                "10",
                "14",
                "3"
              ],
              "enumTitles": [
                "Vaste jobs (permanent)",
                "Tijdelijk met optie vast (temp-to-perm)",
                "Tijdelijke jobs (temporary)",
                "Flexijob",
                "Studentenjobs",
                "Dienstenchequebaan (service vouchers)",
                "Overeenkomst alternerende opleiding (apprenticeship)",
                "Tewerkstellingsmaatregelen",
                "Zelfstandige activiteit (self-employed)",
                "Werfreserve (recruitment reserve)",
                "Examens bij de overheid (public exams)"
              ]
            }
          },
          "workingHours": {
            "title": "Working hours",
            "type": "array",
            "description": "Full-time or part-time. Measured 2026-09-06: Voltijds 195,928 vacancies, Deeltijds 12,055.",
            "items": {
              "type": "string",
              "enum": [
                "V",
                "D"
              ],
              "enumTitles": [
                "Voltijds (full-time)",
                "Deeltijds (part-time)"
              ]
            }
          },
          "workSchedule": {
            "title": "Work schedule / shift pattern",
            "type": "array",
            "description": "Shift pattern. Measured 2026-09-06: Dagwerk 186,744, 2-ploegen 14,978, Weekendwerk 7,405, Nachtwerk 3,682, 3-ploegen 2,547, Volcontinu 1,330, Onderbroken dienst 614.",
            "items": {
              "type": "string",
              "enum": [
                "D",
                "2",
                "3",
                "N",
                "Z",
                "O",
                "V"
              ],
              "enumTitles": [
                "Dagwerk (day work)",
                "2-ploegenstelsel (2 shifts)",
                "3-ploegenstelsel (3 shifts)",
                "Nachtwerk (night)",
                "Weekendwerk (weekend)",
                "Onderbroken dienst (split shift)",
                "Volcontinu systeem (continuous)"
              ]
            }
          },
          "educationLevels": {
            "title": "Required education level",
            "type": "array",
            "description": "Minimum diploma the vacancy asks for. Measured 2026-09-06: Geen 87,524, Secundair 67,127, Bachelor 43,697, Master 15,797, Graduaat/HBO5 10,547, Lager onderwijs 8,903.",
            "items": {
              "type": "string",
              "enum": [
                "A",
                "B",
                "C",
                "F",
                "D",
                "E"
              ],
              "enumTitles": [
                "Geen (none required)",
                "Lager onderwijs (primary)",
                "Secundair onderwijs (secondary)",
                "Graduaat / HBO5",
                "Bachelor",
                "Master"
              ]
            }
          },
          "specificDiplomaCode": {
            "title": "Specific study code (diploma)",
            "type": "string",
            "description": "VDAB study-programme code for an exact qualification, e.g. 600620 = Verpleegkunde (1,552 vacancies measured 2026-09-06). Study codes appear on every detail row as requiredStudies[].code."
          },
          "experienceLevels": {
            "title": "Experience required",
            "type": "array",
            "description": "Measured 2026-09-06: Beperkte ervaring 60,262, Minstens 2 jaar 58,969, Niet van belang 51,313, Geen ervaring 28,758, Minstens 5 jaar 10,350.",
            "items": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "2",
                "3",
                "4"
              ],
              "enumTitles": [
                "Niet van belang (any)",
                "Geen ervaring (none)",
                "Beperkte ervaring (< 2 yrs)",
                "Minstens 2 jaar",
                "Minstens 5 jaar"
              ]
            }
          },
          "drivingLicences": {
            "title": "Driving licence required",
            "type": "array",
            "description": "Licence classes the vacancy requires. Measured 2026-09-06: B 50,688, CE 4,678, C 3,792, BE 574, D 269. 'Geen rijbewijs' (0) returns the 149,740 vacancies that need none.",
            "items": {
              "type": "string",
              "enum": [
                "0",
                "B",
                "BE",
                "C",
                "C1",
                "C1+E",
                "CE",
                "D",
                "D1",
                "D1+E",
                "DE",
                "A",
                "A1",
                "A2",
                "A3",
                "AM",
                "G"
              ],
              "enumTitles": [
                "Geen rijbewijs (none)",
                "B — car",
                "BE — car + trailer",
                "C — heavy truck",
                "C1 — light truck",
                "C1+E — light truck + trailer",
                "CE — heavy truck + trailer",
                "D — bus",
                "D1 — minibus",
                "D1+E — minibus + trailer",
                "DE — bus + trailer",
                "A — motorcycle",
                "A1",
                "A2",
                "A3",
                "AM — moped",
                "G — agricultural"
              ]
            }
          },
          "international": {
            "title": "International vacancies",
            "type": "array",
            "description": "Only vacancies flagged as international. Small but high-value - measured 2026-09-06: Europa 317, Grensregio 32, Buiten Europa 4.",
            "items": {
              "type": "string",
              "enum": [
                "EUROPA",
                "GRENSREGIO",
                "BUITEN_EUROPA"
              ],
              "enumTitles": [
                "Europa",
                "Grensregio's (cross-border)",
                "Buiten Europa (outside Europe)"
              ]
            }
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "1",
              "6"
            ],
            "type": "string",
            "description": "Freshness filter, applied by VDAB server-side - the monitoring lever. MEASURED 2026-09-06: 'Past week' returns 46,969 vacancies; 'Today or yesterday' returned 3,070 at 05:07 UTC and climbs through the Belgian working day, so treat that one as a floor rather than a constant. Pair 'Today or yesterday' with Monitor mode and an Apify Schedule.",
            "default": "any"
          },
          "employerId": {
            "title": "Employer gallery ID",
            "minimum": 1,
            "type": "integer",
            "description": "Pull EVERY vacancy for one employer group. Take the employerGalleryId off any row this Actor returns and paste it here. MEASURED 2026-09-06: id 3446 (Lagom Engineering) returns 892 vacancies across all its entities. This is the key lead-gen lever - it turns one interesting row into that employer's whole hiring footprint."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "STANDAARD",
              "DATUM"
            ],
            "type": "string",
            "description": "'Newest first' is what you want for monitors and fresh-lead runs. (VDAB's own site offers a 'relevance' sort, but its API rejects it with HTTP 400, so it is deliberately not offered here.)",
            "default": "STANDAARD"
          },
          "maxItems": {
            "title": "Max vacancies per run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on rows delivered AND billed. MEASURED 2026-09-06: a run asking for 300 delivered exactly 300 rows, 300 unique ids, and billed 300. Defaults to 50 for a fast, cheap first run. Set 0 for an unlimited sweep - with adaptive slicing on, that can reach the whole 207,809-vacancy corpus.",
            "default": 50
          },
          "pageSize": {
            "title": "Results per API call",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "VDAB accepts 1–200 per call (values above 200 are silently clamped). 100 is a good balance; 200 halves the number of calls on a big sweep.",
            "default": 100
          },
          "startPage": {
            "title": "Start page (0-based)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip the first N pages. VDAB's paging is 0-BASED, so page 0 is the first page. Setting this disables adaptive slicing for that query.",
            "default": 0
          },
          "maxPages": {
            "title": "Max pages per query slice",
            "minimum": 0,
            "type": "integer",
            "description": "Safety stop on pages per query (or per slice when slicing is on). 0 = no page limit, bounded only by Max vacancies and VDAB's own ~20,000-row window.",
            "default": 0
          },
          "autoSliceOversizedQueries": {
            "title": "Adaptive slicing for big sweeps",
            "type": "boolean",
            "description": "VDAB's search caps the reachable offset at ~20,000 rows: past it the same page replays forever. With this on, any query larger than that is split along VDAB's own live facet counts (experience > contract type > working hours > job domain) until every slice fits inside the window, then the slices are merged and de-duplicated. MEASURED 2026-09-06: the whole 207,807-vacancy corpus planned into 164 slices in 27 s, largest slice 16,836, none over the window. Turn it off only if you want exactly one raw query.",
            "default": true
          },
          "includeDetail": {
            "title": "Fetch full detail per vacancy",
            "type": "boolean",
            "description": "Adds one API call per vacancy and unlocks the lead-gen fields: employer website, named hiring contact, direct apply/ATS URL, street address, full description, requirements, offer, languages, licences, region code. Billed as a separate 'detail fetch' event - the ONLY thing that ever bills one, single-vacancy URLs included - so leave it off for cheap listing-only runs.",
            "default": false
          },
          "includeDescriptionHtml": {
            "title": "Also include HTML descriptions",
            "type": "boolean",
            "description": "Adds descriptionHtml / requirementsHtml / offerHtml alongside the plain text. Requires 'Fetch full detail'. Off by default because it roughly triples row size.",
            "default": false
          },
          "includeDescriptionMarkdown": {
            "title": "Also include Markdown descriptions",
            "type": "boolean",
            "description": "Adds descriptionMarkdown / requirementsMarkdown / offerMarkdown. Requires 'Fetch full detail'. Handy for LLM pipelines.",
            "default": false
          },
          "includeDuplicates": {
            "title": "Emit cross-posted twins as their own rows",
            "type": "boolean",
            "description": "7.1% of VDAB vacancies carry a 'dubbels' list of cross-posted twin listings, each with its own VDAB id (measured 2026-09-06 over 1,059 rows; 0-10.6% depending on the query). Off (default), the twins stay nested in the duplicates[] field. On, they become their own rows - and are billed as rows. IMPORTANT: VDAB's 'dubbels' entry carries only the twin's id, title and employer name. With 'Fetch full detail' OFF a twin row is therefore a STUB - only jobId, url, title, employerName, isDuplicateOf, sourceQuery and scrapedAt are populated (duplicateCount is always 0 on a twin), and locationLabel, contractLine, firstPublishedAt and the rest arrive null. With 'Fetch full detail' ON the twin's own detail record is fetched and back-fills those listing columns, so the twin arrives as a full row.",
            "default": false
          },
          "includeRawJobPosting": {
            "title": "Include schema.org JobPosting",
            "type": "boolean",
            "description": "Adds VDAB's own schema.org JobPosting object (title, description, hiringOrganization, jobLocation, employmentType, datePosted), parsed. Requires 'Fetch full detail'.",
            "default": false
          },
          "deduplicateById": {
            "title": "De-duplicate by VDAB vacancy ID",
            "type": "boolean",
            "description": "Keep this ON. It is what stops you paying twice for the same vacancy: cross-posted twins, overlapping keyword crawls, overlapping slices and VDAB's own page-replay at the offset ceiling all resolve to one row per vacancy id. MEASURED 2026-09-06: the same keyword fed three times produced 369 raw rows that collapsed to 123 unique vacancies and billed 123; with this off, the identical input billed all 369.",
            "default": true
          },
          "monitorMode": {
            "title": "Monitor mode (new vacancies only)",
            "type": "boolean",
            "description": "Recurring watcher: remembers every vacancy id seen in earlier runs (in a NAMED key-value store that survives across runs) and outputs ONLY vacancies it has never seen. VERIFIED 2026-09-06: two identical back-to-back runs returned 25 and then the NEXT 25 unseen vacancies, with zero id overlap. Pair with an Apify Schedule and 'Posted within: Today or yesterday'. Billing note: a monitor run carries a flat $0.01 monitor-run fee plus $0.002 per new vacancy; if you set a maxTotalChargeUsd, that flat fee is reserved out of it before any row is delivered, so a cap below ~$0.013 delivers (and bills) nothing.",
            "default": false
          },
          "newOnlySince": {
            "title": "Only vacancies published/updated since",
            "type": "string",
            "description": "ISO date or datetime, e.g. 2026-09-01 or 2026-09-01T00:00:00Z. Drops any vacancy whose first-published AND last-modified dates are both older. Works with or without Monitor mode. NOTE: unlike 'Posted within', VDAB has no server-side filter for this, so it is applied to every row VDAB returns - a cutoff nothing satisfies makes the run page the entire result set before it can report an empty answer (measured 2026-09-06: 175 search calls and 4 min to scan 3,391 rows and deliver 0). Nothing is charged for the rows it drops, and the run log and status message name both the count dropped and the cutoff that dropped them. For a cheap server-side freshness filter use 'Posted within' instead."
          },
          "alertOnNewJob": {
            "title": "Send alerts for new vacancies",
            "type": "boolean",
            "description": "In monitor mode, deliver an alert per newly seen vacancy through the channels below (up to 200 per run).",
            "default": true
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "POST endpoint for new-vacancy alerts (Make / Zapier / n8n / your own). One JSON body per alert."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Slack incoming-webhook URL for formatted new-vacancy cards."
          },
          "emailRecipients": {
            "title": "Email recipients",
            "type": "array",
            "description": "Email addresses for the new-vacancy digest, sent through apify/send-mail.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxy is enough - measured 2026-09-06 at 195/195 search calls and 745/746 detail calls HTTP 200 across 13 platform runs, and 40/40 on a concurrency-8 detail burst. RESIDENTIAL (BE or NL) also works if you ever need it, but it costs more for no measured gain.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrent detail requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Parallel detail fetches. MEASURED 2026-09-06: 8 was clean (40/40 detail fetches HTTP 200 in 13.5 s); 5 is the polite default.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 300,
            "type": "integer",
            "description": "Per-request timeout. Measured 2026-09-06 through the Apify datacenter proxy: a 50-row search run finished cold-container-to-exit in 4.3 s, and no call in 195 searches or 746 detail fetches came near the 45 s default.",
            "default": 45
          },
          "maxRequestRetries": {
            "title": "Max retries per request",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries on a transport error or 5xx, each on a fresh proxy exit. Nothing needed a retry on 2026-09-06 (195/195 searches, 745/746 detail fetches - the one miss a deliberate 404 probe of an id that does not exist), but detail fetches measured 19/20 first-try on an earlier day, so keep this at 3 or higher.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}