Discover/NY API
live

NY APIstatejobs.ny.gov ↗

Access all current New York State public job postings from statejobs.ny.gov. List vacancies with salary, agency, county, and deadlines, or fetch full posting details by ID.

Endpoint health
verified 6d ago
list_vacancies
get_vacancy
2/2 passing latest checkself-healing
Endpoints
2
Updated
14d ago

What is the NY API?

The StateJobsNY API exposes 2 endpoints covering every public vacancy currently listed on statejobs.ny.gov. The list_vacancies endpoint returns paginated summaries of all open postings — including title, agency, county, salary grade, posting date, and application deadline — while get_vacancy retrieves the complete job posting for a single vacancy ID, with parsed salary bounds, work schedule details, contact information, and NY HELPS eligibility status.

This call costs1 credit / call— charged only on success
Try it
Numeric StateJobsNY vacancy ID as shown in the posting's 'Vacancy ID' field and its URL (one shape: 225827); take it from list_vacancies.vacancies[*].vacancy_id.
→ api.parse.bot/scraper/b13a58ad-1b66-42e9-a8f5-9fe2a82cf90b/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/b13a58ad-1b66-42e9-a8f5-9fe2a82cf90b/get_vacancy?vacancy_id=225830' \
  -H 'X-API-Key: $PARSE_API_KEY'
All endpoints · 2 totalmissing one? ·

Returns the complete public job posting for one StateJobsNY vacancy: title, agency, salary grade/range (with parsed numeric min/max), employment and appointment type, work schedule (workweek, hours, workday times, flextime, overtime, compressed workweek, telecommuting flags), work location, duties description, minimum qualifications, additional comments, application deadline (applications_due, MM/DD/YY as shown on the site), agency contact details and the 'Notes on Applying' application instructions. One round trip per call. Text fields preserve the posting's line breaks. A field the posting leaves blank is returned as null; yes/no flags are booleans. A vacancy ID the site reports as nonexistent (including expired/removed postings, which the site drops shortly after their deadline) returns a stale_input / input_not_found error; current IDs come from list_vacancies.

Input
ParamTypeDescription
vacancy_idrequiredstringNumeric StateJobsNY vacancy ID as shown in the posting's 'Vacancy ID' field and its URL (one shape: 225827); take it from list_vacancies.vacancies[*].vacancy_id.
Response
{
  "type": "object",
  "fields": {
    "url": "string public URL of the posting",
    "title": "string job title",
    "agency": "string posting agency name",
    "contact": "object with agency contact name, telephone, fax, email, street, city, state, zip_code (strings or null)",
    "location": "object with county, street_address, city, state, zip_code (strings or null)",
    "ny_helps": "boolean or null, whether the posting is part of the NY HELPS program",
    "schedule": "object with workweek, hours_per_week, workday_from, workday_to (strings or null) and boolean-or-null flags flextime_allowed, mandatory_overtime, compressed_workweek_allowed, telecommuting_allowed",
    "salary_max": "integer parsed upper salary bound, or null when not parseable",
    "salary_min": "integer parsed lower salary bound, or null when not parseable",
    "vacancy_id": "string vacancy identifier as shown on the posting",
    "date_posted": "string date the posting was submitted, MM/DD/YY",
    "salary_grade": "string salary grade",
    "salary_period": "string pay period word from the range (e.g. Annually), or null",
    "bargaining_unit": "string bargaining unit",
    "employment_type": "string Full-Time / Part-Time text",
    "applications_due": "string application deadline, MM/DD/YY",
    "appointment_type": "string appointment type (Permanent, Temporary, Provisional...)",
    "notes_on_applying": "string application instructions, or null",
    "salary_range_text": "string salary range exactly as posted",
    "travel_percentage": "string travel percentage text",
    "duties_description": "string duties text with line breaks, or null",
    "additional_comments": "string additional comments text, or null",
    "jurisdictional_class": "string jurisdictional class",
    "occupational_category": "string occupational category",
    "minimum_qualifications": "string minimum qualifications text with line breaks, or null"
  },
  "sample": {
    "data": {
      "url": "https://statejobs.ny.gov/public/vacancyDetailsView.cfm?id=223334",
      "title": "Human Resources Specialist Trainee* OR Human Resources Specialist 1 (NY HELPS)",
      "agency": "Public Service, Department of",
      "contact": {
        "fax": "518-473-9990",
        "city": "Albany",
        "name": "Human Resources Management - CD",
        "email": "[email protected]",
        "state": "NY",
        "street": "3 Empire State Plaza",
        "zip_code": "12223",
        "telephone": null
      },
      "location": {
        "city": "Albany",
        "state": "NY",
        "county": "Albany",
        "zip_code": "12223",
        "street_address": "3 Empire State Plaza"
      },
      "ny_helps": true,
      "schedule": {
        "workweek": "Mon-Fri",
        "workday_to": "5 PM",
        "workday_from": "9 AM",
        "hours_per_week": "37.5",
        "flextime_allowed": false,
        "mandatory_overtime": false,
        "telecommuting_allowed": true,
        "compressed_workweek_allowed": true
      },
      "salary_max": 87034,
      "salary_min": 59204,
      "vacancy_id": "223334",
      "date_posted": "09/08/26",
      "salary_grade": "18",
      "salary_period": "Annually",
      "bargaining_unit": "M/C - Managerial/Confidential (Unrepresented)",
      "employment_type": "Full-Time",
      "applications_due": "09/21/26",
      "appointment_type": "Permanent",
      "notes_on_applying": "Please send a resume, cover letter, and proof of meeting the minimum qualifications to [email protected] or fax to Human Resources Management at (518)473-9990.  Please reference \"Human Resources Specialist 1, NYHELPS posting 00089\" when applying.",
      "salary_range_text": "From $59204 to $87034 Annually",
      "travel_percentage": "5%",
      "duties_description": "The Human Resources Specialist 1, Grade 18, will work in the Human Resources Management (HRM) Section of the Office of Administration (OA), and will perform duties that include but are not limited to:\n•\tPreparing or assisting in the preparation of requests related to examination planning...",
      "additional_comments": "About the Department:\nThe New York State Department of Public Service (DPS or Department) works to: ensure safe, affordable, and reliable access to electric, gas, steam, water, and telecommunications services...",
      "jurisdictional_class": "Competitive Class",
      "occupational_category": "Administrative or General Management",
      "minimum_qualifications": "General Public\nNon-Competitive (NY HELPS)**:\nFor appointment to a Human Resources Specialist Trainee 1, you must have four years of experience performing and supervising the performance of various human resources activities..."
    },
    "status": "success"
  }
}

About the NY API

Listing Current Vacancies

The list_vacancies endpoint returns all postings currently open to the general public on StateJobsNY, ordered newest first. Each record includes vacancy_id, title, agency, county, salary_grade, date_posted, applications_due (in MM/DD/YY format as shown on the site), and a direct url to the posting. Pagination is controlled with page (1-based) and limit (capped at 500 per page). The response includes total, has_more, and the effective limit after clamping so you can walk the full dataset reliably.

Full Posting Details

The get_vacancy endpoint takes a single vacancy_id — the numeric ID visible in any posting URL — and returns the complete public record. Structured fields include salary_min and salary_max as parsed integers (or null when the source text is not parseable), ny_helps as a boolean flag, and a schedule object with workweek, hours_per_week, workday_from, workday_to, and boolean flags for flextime, mandatory overtime, compressed workweek, and telecommuting. The location object breaks out county, street address, city, state, and zip code. The contact object provides the posting agency's name, phone, fax, email, and mailing address.

Data Coverage and Freshness

The listing reflects the live "Current Vacancies" view on statejobs.ny.gov, so postings appear and disappear as they are opened and closed by state agencies. The applications_due and date_posted fields come directly from the listing table. Vacancy IDs are stable identifiers that match the id query parameter in each posting's public URL, making it straightforward to cross-reference between list output and detail lookups.

Reliability & maintenanceVerified

The NY API is a managed, monitored endpoint for statejobs.ny.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when statejobs.ny.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official statejobs.ny.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
6d ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a job alert tool that polls list_vacancies daily and notifies users when new postings appear in a specific agency or county.
  • Aggregate salary data across agencies by collecting salary_min and salary_max from get_vacancy for all current postings.
  • Filter open NY HELPS program positions by checking the ny_helps boolean returned by get_vacancy.
  • Display a county-level map of open state positions using the county field from list_vacancies.
  • Track application deadlines by extracting applications_due from the listing and alerting when a deadline is within N days.
  • Audit telecommuting-eligible state positions by checking the telecommuting flag inside the schedule object of each posting.
  • Monitor hiring activity by agency using the agency field across paginated list_vacancies responses.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does statejobs.ny.gov have an official developer API?+
No. The New York State government does not publish a public developer API for statejobs.ny.gov vacancy data. This Parse API is the structured programmatic interface for that data.
What does `get_vacancy` return that `list_vacancies` does not?+
list_vacancies returns summary fields: vacancy_id, title, agency, county, salary_grade, date_posted, applications_due, and URL. get_vacancy adds parsed salary_min/salary_max integers, the full schedule object (flextime, overtime, telecommuting, compressed workweek flags, workday hours), the location object with a street address, the contact object with phone/fax/email, and the ny_helps boolean — none of which appear in the listing summary.
Can I filter `list_vacancies` by agency, county, or job title?+
Not currently. The endpoint returns all current public vacancies and supports only page and limit parameters; server-side filtering by agency, county, or title is not available. You can fork this API on Parse and revise it to add filtered query support.
Does the API include closed, expired, or internal (non-public) postings?+
No. list_vacancies reflects only the current public "open to general public" listing at any given moment; postings that have closed or are restricted to current state employees are not included. You can fork this API on Parse and revise it to add an endpoint targeting promotion-only or transfer opportunity listings if those become accessible.
How should I handle a null `salary_min` or `salary_max`?+
The salary fields are parsed from free-text salary strings on the posting. When the source text uses a format that cannot be reduced to a numeric range — such as a narrative description or a single-point value with no clear lower bound — the fields return null. The raw salary string on the full posting page remains the authoritative source in those cases.
Page content last updated . Spec covers 2 endpoints from statejobs.ny.gov.
Related APIs in JobsSee all →