List opportunities
Agent-produced, verified sales opportunities for the caller's projects. There is no review gate: an opportunity is visible to its owner the moment the agent writes it. An opportunity is written once from a signal and is NOT re-verified on its own, so a vacancy can since have been filled. Read `verification_status` and `last_verified_at` before acting on a row, and call POST /opportunities/{id}/refresh to re-check it. A row that has never been re-checked reports `verification_status: "unverified"` and a null `last_verified_at` rather than implying freshness. Each row carries the team's `verdict` from /opportunities/verdicts — acted on (`pursued`), set aside (`dismissed`) or `not_useful` — or null when nothing is filed (open). `verdict` filters on it in the query, so totals and pages are the filtered set.
Agent-produced, verified sales opportunities for the caller's projects. There is no review gate: an opportunity is visible to its owner the moment the agent writes it.
An opportunity is written once from a signal and is NOT re-verified on its own, so a vacancy can since have been filled. Read verification_status and last_verified_at before acting on a row, and call POST /opportunities/{id}/refresh to re-check it. A row that has never been re-checked reports verification_status: "unverified" and a null last_verified_at rather than implying freshness.
Each row carries the team's verdict from /opportunities/verdicts — acted on (pursued), set aside (dismissed) or not_useful — or null when nothing is filed (open). verdict filters on it in the query, so totals and pages are the filtered set.
API key (sk_live_... prefix). Generate keys in the UI under Settings > API Keys, then send it as Authorization: Bearer sk_live_...
In: header
Query Parameters
Filter by project
uuidSignal-based (false) vs ICP-fallback prospecting (true)
"true" | "false"open = nothing filed (the Opportunities page's Open tab); pursued = Acted on; dismissed = Set aside; not_useful; all (default) = every row
"all""open" | "pursued" | "dismissed" | "not_useful" | "all"Results per page
50value <= 200Pagination offset
0Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://loading/api/v1/opportunities"{
"data": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"entity_type": "district",
"district_id": "880bc4ee-477a-4e12-a0f0-c89f020ba05d",
"school_id": "c1317ebe-519d-4c8a-9ab1-7bfd15017c1c",
"association_id": "b7261822-545a-4eed-9acd-2428afa0245c",
"head_start_program_id": "d6d32a6c-34a9-40a4-857a-18d6694c812d",
"childcare_center_id": "c3a58d52-fb27-4f3d-ae32-8c65705b3a35",
"operator_id": "fa9de6bb-1df8-4ba6-9e6d-1172fbf7e166",
"geo_scope": "string",
"title": "string",
"signal_type": "string",
"event_date": "string",
"event_date_basis": "string",
"why_now": "string",
"suggested_action": "string",
"confidence": 1,
"caveats": "string",
"source_urls": [
"string"
],
"signal_ids": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"contacts": [
{
"contact_id": "f245e2a3-e141-4d41-912c-b1c1f5bd5598",
"name": "string",
"title": "string",
"email": "string",
"email_status": "string",
"source": "string"
}
],
"suggested_prompts": [
"string"
],
"supplementary": true,
"created_at": "string",
"updated_at": "string",
"last_verified_at": "string",
"verification_status": "unverified",
"verification_note": "string",
"window_status": "unknown",
"window_ends_on": "string",
"source_checks": [
{
"url": "string",
"checked_at": "string",
"status": "ok",
"note": "string"
}
],
"verdict": "pursued",
"verdict_reason_code": "not_what_we_sell",
"verdict_reason_note": "string",
"verdict_updated_at": "string"
}
],
"pagination": {
"total": -9007199254740991,
"limit": -9007199254740991,
"offset": -9007199254740991,
"has_more": true
}
}{
"error": "string",
"message": "string",
"statusCode": -9007199254740991
}{
"error": "string",
"message": "string",
"statusCode": -9007199254740991
}{
"error": "string",
"message": "string",
"statusCode": -9007199254740991
}Get operator details GET
One operator: whoever runs childcare centers or Head Start programs and is not a school district (a nonprofit, company, church, tribe, or city or county), with the centers and Head Start programs it runs and its people. An id merged into another operator returns the operator it became. The operator and what it runs are served whole on every plan. Its people depend on the plan: a paid plan gets each person in full, and a free plan gets a title alone for anyone not already in its contacts.
Read an opportunity's verification verdict GET
The stored verdict. Poll this after a POST returns 202. TWO independent verdicts, and acting on one alone will burn your reps: `verification_status` — does the CLAIM still hold? `window_status` — is there still a chance to ACT? They fail independently. A procurement page describes its bid accurately for months after the deadline passes, so a row can be `confirmed` and `closed` at the same time — the claim is true and the opportunity is dead. Treat `confirmed` + (`open` | `closing` | `durable`) as live, and nothing else. `durable` means there is nothing to expire (a standing staffing gap, an adopted law). `unreachable` means we could not settle it — unconfirmed, never confirmed. `verifying` means a run is still going.