ConductSpeech

API Documentation

ConductSpeech exposes core analysis capabilities over REST. This page documents the public endpoints available to Research tier subscribers.

Authentication

Send your API key in the X-API-Key header. Generate keys in Settings → API Keys. Keys are shown once and stored as SHA-256 hashes — if you lose a key, revoke it and generate a new one.

curl -X POST https://api.conductspeech.com/analyze \
  -H "X-API-Key: csp_..." \
  -H "Content-Type: application/json" \
  -d '{"utterances": [...], "ageMonths": 48}'

Base URL

https://api.conductspeech.com

Endpoints

POST/analyze

Compute language metrics from pre-transcribed utterances.

Request

{
  "utterances": [
    { "index": 0, "speaker": "child", "text": "the dog runs",
      "morphemes": ["the","dog","run","-s"], "morphemeCount": 4,
      "wordCount": 3, "isGrammatical": true, "errors": [] }
  ],
  "ageMonths": 48
}

Response

{
  "metrics": { "mluMorphemes": 4.0, "mluWords": 3.0, "ttr": 1.0, "ndw": 3, ... },
  "advanced": { "dss": 6.5, "ipsynScore": 12.0, ... },
  "normative": { "expectedRange": [3.75, 4.5], "deviation": -0.25 }
}
POST/batch/analyze

Run analysis on many samples in one request.

Request

{
  "items": [
    { "itemId": "s1", "label": "Pre-test", "ageMonths": 48,
      "utterances": [ ... ] },
    { "itemId": "s2", "label": "Post-test", "ageMonths": 60,
      "utterances": [ ... ] }
  ]
}

Response

{
  "summary": { "total": 2, "succeeded": 2, "failed": 0,
               "meanMluMorphemes": 4.55, "meanTtr": 0.42 },
  "items": [ { "itemId": "s1", "metrics": {...}, "advanced": {...} }, ... ]
}
POST/batch/export

Export batch results as CSV, SPSS syntax, or SAS syntax.

Request

{
  "items": [ ... ],         // batch items with metrics
  "format": "spss"         // csv | spss | sas
}

Response

{
  "format": "spss",
  "csvFilename": "conductspeech_export.csv",
  "csv": "itemId,label,ageMonths,...\n...",
  "syntax": "GET DATA /TYPE=TXT /FILE=...\n...",
  "syntaxFilename": "conductspeech_import.sps"
}
POST/score/narrative

Score a narrative sample (NSS, ESS, or PSS rubric).

Request

{
  "utterances": [ ... ],
  "scheme": "NSS"
}

Response

{
  "narrative": { "score": 28, "subscores": {...}, "method": "claude" },
  "storyGrammar": { "elements": ["setting","initiating event",...] }
}
POST/export/slt

Export utterances as a SALT-compatible .slt transcript.

Request

{
  "utterances": [ ... ],
  "participantId": "STU-001",
  "context": "Conversation"
}

Response

{ "format": "slt", "filename": "STU-001.slt", "body": "$ Child, ..." }
POST/clients/{clientId}/progress-report

Summarize a client's growth across multiple samples.

Request

{
  "ageMonths": 60,
  "samples": [
    { "date": "2026-01-15", "ageMonths": 56, "metrics": {...} },
    { "date": "2026-04-01", "ageMonths": 60, "metrics": {...} }
  ],
  "iepGoals": [{"id":"g1","text":"...","status":"in_progress"}]
}

Response

{ "summary": "...", "goalSummary": "...", "generated": "computed" }

Errors

Errors follow the FastAPI convention: HTTP status code plus a JSON body with a detail field.

  • 400 — invalid request body
  • 401 — missing or invalid API key
  • 413 — audio file exceeds 200 MB
  • 415 — unsupported audio format
  • 422 — utterance schema validation failure
  • 504 — transcription exceeded 5 minute timeout