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.
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.
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'
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.
| Param | Type | Description |
|---|---|---|
| vacancy_idrequired | string | 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. |
{
"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.
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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a job alert tool that polls
list_vacanciesdaily and notifies users when new postings appear in a specific agency or county. - Aggregate salary data across agencies by collecting
salary_minandsalary_maxfromget_vacancyfor all current postings. - Filter open NY HELPS program positions by checking the
ny_helpsboolean returned byget_vacancy. - Display a county-level map of open state positions using the
countyfield fromlist_vacancies. - Track application deadlines by extracting
applications_duefrom the listing and alerting when a deadline is within N days. - Audit telecommuting-eligible state positions by checking the telecommuting flag inside the
scheduleobject of each posting. - Monitor hiring activity by agency using the
agencyfield across paginatedlist_vacanciesresponses.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 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.
Does statejobs.ny.gov have an official developer API?+
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?+
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?+
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.