SchoolScout API
Semantic search

Semantic search

Natural language search across districts, schools, and contacts using vector embeddings. Returns entities ranked by relevance to the query, with matched snippets from crawled content. **1 credit per search.**

POST
/semantic-search

Natural language search across districts, schools, and contacts using vector embeddings. Returns entities ranked by relevance to the query, with matched snippets from crawled content. 1 credit per search.

AuthorizationBearer <token>

API key (sk_live_... prefix). Generate keys in the UI under Settings > API Keys, then send it as Authorization: Bearer sk_live_...

In: header

Request Body

application/json

query*string

Natural language search query (min 2 characters)

Length2 <= length
entity_type*string

Type of entity to search

Value in"district" | "school" | "contact"
state?string

Filter by state abbreviation (e.g., CO, TX)

district_id?string

Filter contacts/schools by parent district UUID

school_id?string

Filter contacts by parent school UUID

limit?integer

Max results to return (default 50, max 500)

Range1 <= value <= 500

Response Body

application/json

application/json

application/json

curl -X POST "https://loading/api/v1/semantic-search" \  -H "Content-Type: application/json" \  -d '{    "query": "string",    "entity_type": "district"  }'
{
  "data": [
    {
      "property1": null,
      "property2": null
    }
  ],
  "relevance": {
    "property1": 0,
    "property2": 0
  },
  "matches": {
    "property1": [
      {
        "content": "string",
        "source_type": "string",
        "url": "string",
        "source_id": "string"
      }
    ],
    "property2": [
      {
        "content": "string",
        "source_type": "string",
        "url": "string",
        "source_id": "string"
      }
    ]
  },
  "coverage": {
    "embedded": -9007199254740991,
    "total": -9007199254740991
  },
  "_access_summary": {
    "total_results": -9007199254740991,
    "unlocked": -9007199254740991,
    "locked_processed": -9007199254740991,
    "locked_unprocessed": -9007199254740991,
    "unlock_all_cost": 0
  }
}
Empty
{
  "error": "string",
  "message": "string",
  "statusCode": -9007199254740991
}
{
  "error": "string",
  "message": "string",
  "balance": 0,
  "required": 0
}