passport.cityofnewyork.us APIpassport.cityofnewyork.us ↗
Access NYC PASSPort public procurement solicitations. Retrieve RFx listings with agency, EPIN, status, procurement method, and release date via 2 endpoints.
curl -X GET 'https://api.parse.bot/scraper/818a1929-82b5-4d75-a8cc-bdfe20bd21a1/list_solicitations?max_pages=1' \ -H 'X-API-Key: $PARSE_API_KEY'
List all public solicitations available on NYC PASSPort. Automatically paginates through result pages to retrieve data. Each page contains 15 results.
| Param | Type | Description |
|---|---|---|
| keyword | string | Optional keyword to filter solicitations by name or description. |
| max_pages | integer | Maximum number of pages to retrieve. Each page contains 15 results. |
{
"type": "object",
"fields": {
"total_count": "integer - total number of solicitations available on the site",
"solicitations": "array of solicitation objects with program, industry, epin, procurement_name, agency, rfx_status, procurement_method, release_date, due_date, remaining_time, main_commodity, and detail_id",
"retrieved_count": "integer - number of solicitations actually retrieved"
},
"sample": {
"data": {
"total_count": 151,
"solicitations": [
{
"epin": "06926P0008",
"agency": "DEPARTMENT OF SOCIAL SERVICES",
"program": "(0705) DOMESTIC VIOLENCE SERVICES",
"due_date": "12/31/2099 7:00:00 PM",
"industry": "Human/Client Service",
"detail_id": "36777",
"rfx_status": "Released",
"release_date": "5/13/2026 5:00:00 PM",
"main_commodity": "Housing Services",
"remaining_time": "Buyer has not set a bid due date",
"procurement_name": "06926P0008-Open-Ended RFx for DV Emergency Shelter Beds",
"procurement_method": "Competitive Sealed Proposal"
}
],
"retrieved_count": 15
},
"status": "success"
}
}About the passport.cityofnewyork.us API
The NYC PASSPort Solicitations API provides access to New York City's public procurement opportunities through 2 endpoints, returning fields like EPIN, agency, procurement method, RFx status, and release date for every active solicitation. The list_solicitations endpoint retrieves all public RFx records with automatic pagination, while search_solicitations filters results by keyword across solicitation names and descriptions.
What the API Returns
Both endpoints return an array of solicitation objects drawn from NYC PASSPort, the City of New York's Procurement and Sourcing Solutions Portal. Each object includes: program, industry, epin (the unique procurement identifier), procurement_name, agency, rfx_status, procurement_method, and release_date. The response also surfaces total_count (total solicitations available on the site) and retrieved_count (how many were actually fetched in the current request).
Endpoints and Parameters
list_solicitations accepts an optional keyword string to filter by name or description, and an optional max_pages integer to cap how many pages are fetched — each page holds 15 records. This makes it straightforward to do a full sweep of all open solicitations or limit retrieval to a manageable batch.
search_solicitations takes the same keyword and max_pages parameters and additionally echoes back the keyword field in the response so you can confirm which query produced the results. Use this endpoint when you want to target a specific topic, industry, or agency name rather than pulling the full list.
Pagination and Coverage
Results are paginated at 15 solicitations per page on the source portal. Both endpoints handle pagination automatically up to the max_pages limit you specify. Omitting max_pages will retrieve all available pages. The total_count field lets you calculate how many pages exist before committing to a full retrieval.
- Monitor new RFx releases from specific NYC agencies by polling
list_solicitationsand filtering on theagencyfield. - Build a procurement alert system that runs
search_solicitationswith industry-specific keywords and flags newrelease_dateentries. - Compile a dataset of NYC contracting opportunities segmented by
procurement_method(RFP, RFQ, RFI) for competitive analysis. - Track
rfx_statuschanges over time to identify solicitations moving from open to awarded or cancelled. - Populate a vendor-facing dashboard with open NYC solicitations matched to a company's registered
industrycategories. - Research NYC procurement patterns by aggregating solicitation volume per
agencyover time usingtotal_countand paginated records. - Cross-reference
epinvalues against contract award databases to map solicitations to their eventual outcomes.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does NYC PASSPort have an official developer API?+
What does the `epin` field represent and how is it useful?+
epin (Electronic Procurement Identification Number) is the unique identifier assigned to each procurement in the NYC PASSPort system. It can be used to look up a specific solicitation directly on the portal and to join records across datasets that reference the same procurement.What is the difference between `list_solicitations` and `search_solicitations`?+
list_solicitations retrieves all public solicitations on the portal, with an optional keyword filter applied client-side. search_solicitations submits the keyword as a search query and returns only matching results, also surfacing the keyword field in the response to confirm which query was used. For broad sweeps use list_solicitations; for targeted lookups use search_solicitations.Does the API return solicitation documents, attachments, or award details?+
Are there any limitations on how much data can be retrieved in one request?+
max_pages controls the upper bound on records returned. If max_pages is omitted, the API will paginate through all available pages, which can result in a large response when total_count is high. For large datasets, setting a reasonable max_pages value and iterating incrementally is advisable.