SchoolScout API
Contacts

Search contacts

Search contacts with parent-first access gating. Returns two sections: `data` contains full contact records at unlocked parent districts/schools (PII gated per contact unlock); `_locked_parent_contacts` summarizes how many additional contacts match at locked parent entities, with names and unlock costs. Unlock a parent district/school to move its contacts into `data`. **Free (0 credits).**

GET
/contacts

Search contacts with parent-first access gating. Returns two sections: data contains full contact records at unlocked parent districts/schools (PII gated per contact unlock); _locked_parent_contacts summarizes how many additional contacts match at locked parent entities, with names and unlock costs. Unlock a parent district/school to move its contacts into data. Free (0 credits).

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

Query Parameters

district_id?string

Filter by district UUID

school_id?string

Filter by school UUID

state?string

State abbreviation

search?string

Text search on name or title

title_ilike?string

Title pattern (e.g., superintendent, technology)

is_district_contact?string

true for district-level, false for school-level

enrichment_status?string

pending, processing, completed, error

list_id?string

Contacts in this list

district_list_ids?string

Contacts at districts in these lists (comma-separated UUIDs)

school_list_ids?string

Contacts at schools in these lists (comma-separated UUIDs)

vendor_ids?string

Contacts at orgs using these vendors (comma-separated UUIDs)

vendor_category?string

sis, lms, assessment, communication, hr, finance, security, sso, devices, other

rfp_status?string

open, closed, won, lost, no_bid

pain_point_category?string

staffing, budget, infrastructure, security, integration, compliance, enrollment, other

has_pain_points?string

true to filter contacts at orgs with pain points

funding_source?string

esser, erate, title_i, bond, grant, state, other

has_expiring_contracts?string

true to filter contacts at orgs with expiring contracts

unique?string

true to use deduplicated contact view (default: true)

unlocked_only?string

true to show only contacts your org has unlocked

order_by?string

Sort field

order_ascending?string

Sort direction

Default"true"
limit?integer

Results per page

Default50
offset?integer

Pagination offset

Default0

Response Body

application/json

application/json

curl -X GET "https://loading/api/v1/contacts"
{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "district_id": "550e8400-e29b-41d4-a716-446655440000",
      "school_id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "string",
      "title": "string",
      "email": "string",
      "phone": "string",
      "state": "string",
      "is_district_contact": true,
      "linkedin_url": "string",
      "profile_summary": "string",
      "key_facts": {
        "property1": null,
        "property2": null
      },
      "source": "string",
      "source_url": "string",
      "enrichment_status": "pending",
      "enriched_at": "string",
      "enrichment_error": "string",
      "enrichment_retry_count": -9007199254740991,
      "qualification_score": 0,
      "qualification_justification": "string",
      "qualified_at": "string",
      "email_status": "pending",
      "email_error": "string",
      "email_retry_count": -9007199254740991,
      "emailed": true,
      "emailed_at": "string",
      "email_bounced": true,
      "email_bounced_at": "string",
      "email_confidence_score": -9007199254740991,
      "email_verification_status": "string",
      "email_verified_at": "string",
      "hubspot_contact_id": "string",
      "hubspot_synced_at": "string",
      "hubspot_sync_status": "pending",
      "hubspot_sync_error": "string",
      "notes": "string",
      "discovered_at": "string",
      "last_updated_at": "string",
      "created_at": "string",
      "_access": {
        "is_unlocked": true,
        "is_scouting": true,
        "unlocked_at": "string",
        "credits_spent": 0,
        "unlock_cost": 0
      }
    }
  ],
  "pagination": {
    "total": -9007199254740991,
    "limit": -9007199254740991,
    "offset": -9007199254740991,
    "has_more": true
  },
  "_access_summary": {
    "total_results": -9007199254740991,
    "unlocked": -9007199254740991,
    "locked_processed": -9007199254740991,
    "locked_unprocessed": -9007199254740991,
    "unlock_all_cost": 0
  },
  "_locked_parent_contacts": {
    "total_hidden": -9007199254740991,
    "message": "string",
    "parents": [
      {
        "entity_type": "district",
        "entity_id": "550e8400-e29b-41d4-a716-446655440000",
        "name": "string",
        "contact_count": -9007199254740991,
        "unlock_cost": 0
      }
    ]
  }
}
{
  "error": "string",
  "message": "string",
  "statusCode": -9007199254740991
}