Unofficial NYT Connections API Documentation | Daily Puzzle JSON by Date Unofficial API docs for NYT Connections puzzle data. Use GET /svc/connections/v2/{date}.json to fetch daily puzzle JSON, with date availability notes, sample responses, error handling, caching, and best practices. ## Sections • [CONNECTIONS](https://app.theneo.io/webapi/nyt/nytconnections.md): NYT Connections API Documentation Overview This API documentation is provided by a website offering daily Connections hints to help developers access NYT Connections game data. Please note that this website provides the documentation for convenience only and is not the official API provider. Endpoint HTTP GET https://www.nytimes.com/svc/connections/v2/{date}.json Parameters Date Constraints Earliest Date : 2023-06-12 (the official launch date of NYT Connections) Future Dates : The API may return data for future dates if the NYT team has pre-uploaded puzzles to their server Important Notes on Future Data Availability The New York Times typically uploads Connections puzzles several days or even weeks in advance. The availability of future puzzle data depends entirely on their editorial team's workflow and upload schedule: Sometimes you may only access tomorrow's or the day after tomorrow's data Other times you might be able to retrieve data up to a month in advance There is no strict automated rule for how far in advance puzzles are uploaded Discovering the Upper Boundary of Available Data To find the latest available puzzle date, implement a loop that: Start with tomorrow's date Increment the date by one day for each request If the response returns 200 with status: "OK" → data exists, save it and continue If the response returns 404 Not Found → you've reached the boundary of currently uploaded data This method allows you to determine the most recent puzzle date available on the server. Request Example Plain text GET https://www.nytimes.com/svc/connections/v2/2025-12-10.json Response Format Success Response HTTP Status : 200 OK Plain text { "status": "OK", "id": 1, "print_date": "2023-06-12", "editor": "Wyna Liu", "categories": [ { "title": "WET WEATHER", "cards": [ { "content": "HAIL", "position": 9 }, { "content": "RAIN", "position": 11 }, { "content": "SLEET", "position": 12 }, { "content": "SNOW", "position": 0 } ] }, { "title": "NBA TEAMS", "cards": [ { "content": "BUCKS", "position": 6 }, { "content": "HEAT", "position": 4 }, { "content": "JAZZ", "position": 8 }, { "content": "NETS", "position": 15 } ] }, { "title": "KEYBOARD KEYS", "cards": [ { "content": "OPTION", "position": 10 }, { "content": "RETURN", "position": 7 }, { "content": "SHIFT", "position": 2 }, { "content": "TAB", "position": 5 } ] }, { "title": "PALINDROMES", "cards": [ { "content": "KAYAK", "position": 3 }, { "content": "LEVEL", "position": 1 }, { "content": "MOM", "position": 14 }, { "content": "RACECAR", "position": 13 } ] } ] } Response Fields Error Response HTTP Status : 404 Not Found (or other error status) Plain text { "status": "ERROR", "errors": [ "Not Found" ], "results": [] } Error Response Fields Response Validation To determine if the request was successful, check if the status field equals "OK" . Plain text if (response.status === "OK") { // Process puzzle data } else { // Handle error } Usage Examples Fetching Today's Puzzle Plain text const today = new Date().toISOString().split('T')[0]; // Format: yyyy-MM-dd const url = `https://www.nytimes.com/svc/connections/v2/${today}.json`; fetch(url) .then(response => response.json()) .then(data => { if (data.status === "OK") { console.log("Puzzle categories:", data.categories); } else { console.error("Error:", data.errors); } }); Finding the Latest Available Puzzle Plain text async function findLatestPuzzle() { let currentDate = new Date(); currentDate.setDate(currentDate. getDate() + 1); // Start with tomorrow while (true) { const dateStr = currentDate.toISOString().split('T')[0]; const url = `https://www.nytimes.com/svc/connections/v2/${dateStr}.json`; try { const response = await fetch(url); const data = await response.json(); if (data.status !== "OK") { // Found the boundary currentDate.setDate(currentDate. getDate() - 1); return currentDate.toISOString().split('T')[0]; } // Move to next day currentDate. setDate(currentDate.getDate() + 1); } catch (error) { currentDate.setDate(currentDate. getDate() - 1); return currentDate.toISOString().split('T')[0]; } } } Rate Limiting and Best Practices Be respectful of the NYT servers when making requests Implement appropriate caching mechanisms to avoid unnecessary repeated requests Consider adding delays between requests when discovering the data boundary Handle errors gracefully and implement retry logic for network failures Disclaimer : This is an unofficial API documentation. The API is provided by The New York Times and may change without notice. Always ensure your usage complies with The New York Times' terms of service.