{
  "openapi": "3.0.1",
  "info": {
    "title": "Connecticut Payroll & Pension - State Employee and Retiree Pay",
    "description": "Connecticut state employee payroll (29.9M rows, 2015-today) and open pension (8.15M rows, 2014-today) as public open data: agency, department, job, union, hire and termination dates, overtime and gross pay; plus tier, retirement type and pension wage. Filter by name, agency, union, year or amount.",
    "version": "0.0",
    "x-build-id": "a2bmrPdnhoM0faQ88"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/j0401~ct-payroll-pension/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-j0401-ct-payroll-pension",
        "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/j0401~ct-payroll-pension/runs": {
      "post": {
        "operationId": "runs-sync-j0401-ct-payroll-pension",
        "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/j0401~ct-payroll-pension/run-sync": {
      "post": {
        "operationId": "run-sync-j0401-ct-payroll-pension",
        "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": {
          "corpus": {
            "title": "Register",
            "enum": [
              "payroll",
              "pension"
            ],
            "type": "string",
            "description": "payroll = state employee pay records (default, 29.9M rows). pension = retiree pension payments (8.15M rows). 🔴 The two cannot be joined to each other: their hashed employee ids are different hash spaces (0 of 10 cross-register matches, verified). Descriptions below mark which register each filter belongs to.",
            "default": "payroll"
          },
          "firstName": {
            "title": "First name (contains)",
            "type": "string",
            "description": "Substring match on the first name. Both registers. Blank = any.",
            "default": ""
          },
          "lastName": {
            "title": "Last name (contains)",
            "type": "string",
            "description": "Substring match on the last name. Both registers. Blank = any.",
            "default": ""
          },
          "agency": {
            "title": "Agency (contains)",
            "type": "string",
            "description": "Payroll only. Substring match on the employing agency, e.g. 'University of Connecticut', 'Correction', 'Transportation'. 124 agencies, fully populated across all years. Blank = any.",
            "default": ""
          },
          "department": {
            "title": "Department (contains)",
            "type": "string",
            "description": "Payroll only. Substring match on the sub-department. 🔴 Only populated from calendar 2024 onward (5.0M of 29.9M rows, 17%) - for 2023 and earlier it is entirely blank. Use 'agency' for a filter that spans the whole register. Blank = any.",
            "default": ""
          },
          "jobCode": {
            "title": "Job title (contains)",
            "type": "string",
            "description": "Payroll only. Substring match on the State's own job code description, e.g. 'CorrectionOfficer', 'JudicialEmployee', 'UCHC UniversityHealthProf'. 4,332 distinct values. Blank = any.",
            "default": ""
          },
          "unionDescription": {
            "title": "Union (contains)",
            "type": "string",
            "description": "Substring match on the bargaining unit's description. Both registers (87 unions on payroll, 81 on pension). Blank = any.",
            "default": ""
          },
          "tierDescription": {
            "title": "Pension tier",
            "enum": [
              "",
              "SERS - TIER1A",
              "SERS - TIER1B",
              "SERS - TIER1C",
              "SERS - TIER2",
              "SERS - TIER2A",
              "SERS - TIER3",
              "SERS - TIER4",
              "SERS - HYBRID TIER 3",
              "SERS-HYBRID TIER 2",
              "SERS-HYBRID TIER 2A",
              "Judges/Widows/Comp Comm Ret Pl",
              "Probate Judges Retirement Sys",
              "Statutory - State Attorneys",
              "Statutory - Public Defenders",
              "Municipal Employees Retire Sys"
            ],
            "type": "string",
            "description": "Pension only. The retirement plan and tier, matched exactly. 15 values plus a blank tier (39,862 rows). Note 'SERS-HYBRID TIER 2' and 'SERS - HYBRID TIER 3' differ only in spacing, and 'SERS - TIER2' is a substring of 'SERS - TIER2A' - both are separate values here. Blank = any.",
            "default": ""
          },
          "bargainingUnit": {
            "title": "Bargaining unit code",
            "type": "string",
            "description": "Pension only. Substring match on the bargaining unit code (e.g. '06', '07', '10'). 82 values. Blank = any.",
            "default": ""
          },
          "retireTypeDescription": {
            "title": "Retirement type",
            "enum": [
              "",
              "Service (25 Years or More)",
              "Voluntary Retirement < 25 Yrs",
              "Hazardous Duty",
              "Vested Rights",
              "Optionee without Equity",
              "Optionee with Equity",
              "Disability",
              "Service Related Disability",
              "State Police  Sec 5-173",
              "Accts with manual/special COLA",
              "Layoff (5-163)",
              "Pre-Retirement Death Benefit",
              "5 yr Vested at age 62",
              "Accts with No Cola",
              "FireFgtr/Other Haz 415 Max Lim",
              "Died prior to DOR",
              "5 yr Vested at age 65",
              "NonHaz Duty Pending Disability",
              "Normal Retirement",
              "Early Retirement",
              "HAZ Duty Vested TIER I",
              "HAZ Duty Pending Disability",
              "Hybrid",
              "Mandatory",
              "ARP to Hybrid Transfer",
              "Receiving Option",
              "60% Non-Svc Related Disblty",
              "Optionee and Survivor"
            ],
            "type": "string",
            "description": "Pension only. Why the person is drawing a pension - 'Service (25 Years or More)' (2.6M), 'Hazardous Duty' (991K), 'Disability', 'Vested Rights' and others. 29 values in total, matched exactly. Blank = any.",
            "default": ""
          },
          "retirementState": {
            "title": "Retiree residence state",
            "type": "string",
            "description": "Pension only. Two-letter state where the retiree lives, e.g. 'CT' (5.9M), 'FL' (805K), 'MA', 'NC'. 77 values. Blank = any.",
            "default": ""
          },
          "city": {
            "title": "City (contains)",
            "type": "string",
            "description": "Payroll only. Substring match on the employee's home city, e.g. 'Hartford', 'Stamford'. Blank = any.",
            "default": ""
          },
          "fullPart": {
            "title": "Full or part time",
            "enum": [
              "",
              "F",
              "P"
            ],
            "type": "string",
            "description": "Payroll only. 'F' = full-time (23.7M rows), 'P' = part-time (6.2M). Blank = any.",
            "default": ""
          },
          "jobIndicator": {
            "title": "Job indicator",
            "enum": [
              "",
              "P",
              "S",
              "N"
            ],
            "type": "string",
            "description": "Payroll only. The State's own job-indicator codes: 'P' (27.9M), 'S' (2.0M), 'N' (71 rows). Blank = any.",
            "default": ""
          },
          "checkStatus": {
            "title": "Check status",
            "enum": [
              "",
              "F",
              "R"
            ],
            "type": "string",
            "description": "Payroll only. 'F' = final (29.9M rows), 'R' = reversal (11,010 rows, i.e. a payment that was clawed back). Blank = any.",
            "default": ""
          },
          "year": {
            "title": "Year",
            "type": "integer",
            "description": "Calendar year on payroll (2010-2026; the source's own title says 2015 but the file opens in 2010), balance year on pension (2014-2026). Same value, both registers - the actor writes it in each register's own type. Blank = any."
          },
          "checkFrom": {
            "title": "Pay date from",
            "type": "string",
            "description": "Earliest check (pay) date, YYYY-MM-DD. Both registers. Blank = any.",
            "default": ""
          },
          "checkTo": {
            "title": "Pay date to",
            "type": "string",
            "description": "Latest check (pay) date, YYYY-MM-DD. Both registers. Blank = any.",
            "default": ""
          },
          "minAmount": {
            "title": "Minimum amount",
            "type": "number",
            "description": "Smallest gross pay (payroll) or pension wage (pension) in dollars. Leave blank to include refunds and adjustments, which are negative (339 payroll rows in 2026 alone, down to -$124,657.73; 4,959 pension rows). Set 0.01 for payments only."
          },
          "maxAmount": {
            "title": "Maximum amount",
            "type": "number",
            "description": "Largest gross pay or pension wage in dollars. Blank = no upper bound."
          },
          "recentDays": {
            "title": "Paid within the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Only rows whose pay date falls within the last N days. Ignored when 'Pay date from' is set. 0 = off.",
            "default": 0
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "rows",
              "aggregate"
            ],
            "type": "string",
            "description": "rows = pay records matching your filters (default). aggregate = one count row per group (see groupBy).",
            "default": "rows"
          },
          "groupBy": {
            "title": "Aggregate by",
            "enum": [
              "",
              "agency",
              "department",
              "jobIndicator",
              "checkStatus",
              "tierDescription",
              "bargainingUnit",
              "retireTypeDescription",
              "retirementState",
              "year"
            ],
            "type": "string",
            "description": "Which dimension to aggregate over (mode=aggregate). Blank = agency on payroll, tierDescription on pension. Every group is returned - aggregate mode is not cut off by maxResults. 🔴 Payroll and pension dimensions do not overlap, and a mismatched pair is refused rather than silently answered over the wrong register; 'year' works on both.",
            "default": ""
          },
          "maxResults": {
            "title": "Max records",
            "minimum": 0,
            "type": "integer",
            "description": "Cap the number of records pushed in rows mode (0 = default 50; up to 2,000 per run). Each record is metered individually, so there is no per-run charge cap. Aggregate mode returns every group.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}