AI search, asynchronously
Find projects no structured filter can express — "unresolved traffic concerns" — and pay only for confirmed matches.
Who this is for
You are looking for something the taxonomy does not have a field for. "Projects where neighbours raised unresolved traffic concerns" is not a filter and never will be; it is a question about what the minutes say.
How it works
- 1You submit a natural-language query, optionally with structured filters to bound it.
- 2We retrieve candidates and rank them by how well they match.
- 3We read the candidates in ranked order and confirm or reject each one against your query, working through them in batches.
- 4We stop as soon as a batch confirms nothing — matches concentrate at the top of the ranking, so continuing past that point spends time and money to find nothing.
- 5You receive the confirmed matches, and you are charged 1 credit for each one delivered.
Submit
Submit an AI search
curl -X POST 'https://api.boardwalkai.com/api/v1/projects/ai-search/jobs' \
-H 'Authorization: Bearer bwk_live_YOUR_KEY' \
-H 'Idempotency-Key: traffic-concerns-2026-08-02' \
-H 'Content-Type: application/json' \
-d '{
"query": "projects where neighbours raised unresolved traffic concerns",
"states": [
"UT",
"CO",
"AZ"
],
"limit": 100
}'Response · HTTP 202
{
"requestId": 918442,
"status": "pending",
"pollUrl": "/api/v1/projects/ai-search/jobs/918442",
"meta": {
"creditsReserved": 100,
"limit": 100,
"trialTruncation": null
}
}The response shape on this page is the one the endpoint builds — the keys, their nesting and their types are asserted against the shipping code by a test. The numbers inside it are the scenario being walked through, not a measurement of the corpus.
Credits are reserved up front against your requested limit, and settled down to what is actually delivered. The Idempotency-Key matters more here than anywhere else on the surface: a duplicated submit reserves the budget twice, and two identical submits can hold the whole pool while both run. With a key, a retry replays the same job.
Poll
Poll it — and note the charge is smaller than the reservation
curl 'https://api.boardwalkai.com/api/v1/projects/ai-search/jobs/918442' \
-H 'Authorization: Bearer bwk_live_YOUR_KEY'Response · HTTP 200
{
"requestId": 918442,
"status": "completed",
"creditsReserved": 100,
"creditsCharged": 23,
"createdAt": "2026-08-02T14:31:02+00:00",
"startedAt": "2026-08-02T14:31:04+00:00",
"completedAt": "2026-08-02T14:33:47+00:00",
"expiresAt": "2026-08-09T14:33:47+00:00",
"data": [
{
"id": 184203,
"recordType": "project",
"projectName": "Alta Ridge Phase II",
"projectHeadline": "Planning Commission approved 240 apartments with conditions",
"boardwalkLink": "https://boardwalkai.com/map/#project=184203",
"mergedFrom": [
184203,
184987
],
"createdAt": "2026-05-04T00:00:00Z",
"lastUpdated": "2026-06-18T09:22:41Z",
"meetingDate": "2026-06-17",
"delivery": {
"alreadyExported": false,
"updatedSinceExport": null,
"lastExportedAt": null,
"billed": true
},
"address": "3600 S Constitution Blvd, West Valley City, UT",
"city": "West Valley City",
"county": "Salt Lake",
"state": "UT",
"postalCode": "84119",
"latitude": 40.6916,
"longitude": -112.0011,
"locationPrecision": "address",
"locationPrecisionLabel": "Address",
"isApproximate": false,
"parcelApn": [
"15-27-301-004"
],
"propertyType": "residential",
"propertyTypeLabel": "Residential",
"propertySubtype": "multifamily",
"propertySubtypeLabel": "Multifamily",
"assetClass": "Apartment Building",
"assetClassLabel": "Apartment Building",
"status": "approved_with_conditions",
"statusLabel": "Approved with Conditions",
"statusDetail": "The commission approved the preliminary plat subject to eight conditions.",
"requestType": "final_plat",
"requestTypeLabel": "Final Plat",
"decisionBody": "Planning Commission",
"caseNumbers": [
"PLAT-2026-0142"
],
"acreage": 9.8,
"unitCount": [
{
"count": 240,
"type": "apartment",
"typeLabel": "Apartment"
}
],
"totalUnitCount": 240,
"existingZoning": "A-1",
"proposedZoning": "RM-16",
"isRezone": true,
"constructionType": "new_building",
"constructionTypeLabel": "New Building",
"ownerType": "private",
"ownerTypeLabel": "Private",
"constructionDescription": "A 240-unit garden-style apartment community on 9.8 acres.",
"developerCompany": "Alta Ridge Development LLC",
"developerCompanyRole": "developer",
"developerCompanyRoleLabel": "Developer",
"contacts": [
{
"name": "Rachel Okafor",
"title": "Director of Development",
"role": "developer",
"roleLabel": "Developer",
"partyClass": "external",
"partyClassLabel": "External Party",
"entityType": "person",
"company": "Alta Ridge Development LLC",
"email": "r.okafor@example.com",
"emailConfidence": "high",
"emailSource": "filing",
"phone": "+1-555-0142",
"phoneConfidence": "high",
"phoneSource": "filing",
"linkedinUrl": null,
"linkedinConfidence": null,
"linkedinSource": null,
"contactProvenance": "filing",
"enrichmentSource": null,
"enrichedAt": null,
"enrichmentStatus": "not_requested",
"contactsWithheldReason": null
}
],
"contactEnrichment": {
"status": "not_requested",
"statusLabel": "Not Requested",
"attemptedAt": null,
"contactsFound": 0,
"source": "registry"
},
"publicOfficials": [
{
"name": "Dana Whitfield",
"title": "Senior Planner",
"role": "city_planner",
"roleLabel": "City Planner",
"partyClass": "government",
"organization": "West Valley City"
}
],
"contactSummary": {
"externalCount": 1,
"governmentCount": 1,
"unclassifiedCount": 0,
"withEmail": 1,
"withPhone": 1,
"withLinkedin": 0,
"enrichedCount": 0,
"lowConfidenceWithheld": 0,
"withheldCount": 0,
"withheldReason": null
},
"keyFacts": [
{
"fact": "240 apartment units across six buildings",
"category": "unit_mix",
"categoryLabel": "Unit Mix"
}
],
"evidence": "Commissioner Reyes moved to approve subject to conditions 1-8.",
"voteSummary": {
"yes": 2,
"no": 1,
"abstain": 0,
"absent": 1,
"total": 4,
"isUnanimous": false,
"meetingDate": "2026-06-17"
}
}
],
"meta": {
"schemaVersion": "2026-08-02",
"representation": "standard",
"creditsUsed": 23,
"candidatesReviewed": 3000,
"confirmedMatches": 23
},
"stopReason": null,
"partialReason": null
}The response shape on this page is the one the endpoint builds — the keys, their nesting and their types are asserted against the shipping code by a test. The numbers inside it are the scenario being walked through, not a measurement of the corpus.
Reserved 100, charged 23. This is the normal case, not an exception. The quote you get before an AI search is a ceiling, not a prediction: early stop means most requests confirm far fewer records than the limit they reserved against, and you are refunded the difference.
The ceilings
| Ceiling | Value | What it means for you |
|---|---|---|
| Candidates reviewed | Up to 10,000 per request | A hard stop on how much reading one request can do. Reaching it is reported, not hidden. |
| Confirmed matches returned | Up to 1,000 per request | The largest result set one AI search can deliver — and, at 1 credit each, its largest possible cost. |
| Per-account daily budget | Enforced, value not published | There is a per-account daily ceiling on AI-search work. We have not measured the right number yet, so we are not publishing one. When you hit it you get a clear error rather than a silent truncation. |
What it costs
| Confirmed matches delivered | Credits |
|---|---|
| 0 | 0 |
| 23 | 23 |
| 100 | 100 |
| 1,000 | 1,000 |
What can go wrong
402 insufficient_credits— the reservation does not fit in the balance. Lowerlimit, or top up. Nothing was reserved.- A job that ends
partialdelivered real, billed, verified records and stopped early for a stated reason instopReason. It is not a failure and the records are yours. - A job that ends
expiredmeans the result was not collected in time. Submit a new search.
Next
Ready to make a call?
A free Boardwalk trial includes API access and a sandbox key. Counting, filtering, the location tree and the analytics plane cost nothing, so you can evaluate the data before you spend a credit.