The record: codossier.intake/1
One record stands behind every way a matter starts (chat, voice, file drop, direct submission). A direct submission sends it whole: an attributed conversation in order, optional facts with their sources, and the documents it refers to. The schema is at https://api.codossier.com/v1/schemas/codossier.intake/1.0.
{
"intent": "open_matter",
"intake": {
"schema": "codossier.intake/1.0",
"channel": "direct",
"language": "en",
"matter": {
"name": "Reyes v. Northwind",
"external_id": "M-2026-0412",
"practice_area": "employment",
"jurisdiction": "NJ",
"submitted_by": "counsel"
},
"turns": [
{ "n": 1, "speaker": "lawyer", "text": "What happened, in your words?" },
{ "n": 2, "speaker": "client", "text": "I was dismissed on March 4, three weeks after I reported...", "cites": ["f1"] },
{ "n": 3, "speaker": "lawyer", "text": "What would a good outcome look like?" },
{ "n": 4, "speaker": "client", "text": "Reinstatement, or the severance they promised and my name cleared." }
],
"facts": [
{ "id": "f1", "text": "Dismissed 2026-03-04.", "source": { "document": "d1", "page": 1, "quote": "effective March 4, 2026" }, "basis": "recorded" }
],
"documents": [
{ "id": "d1", "filename": "termination-letter.pdf", "media_type": "application/pdf", "sha256": "9f…", "pages": 2, "ref": "iManage 48812 v3" }
],
"produced_by": { "prompt": "yourfirm.intake", "model": "your-interviewer-v2", "at": "2026-10-08T17:50:00Z" }
}
}| Field | Where | Required | Meaning |
|---|---|---|---|
channel | intake | yes | "direct" for a record you produced. (Codossier's own producers write "chat", "voice", "drop".) |
language | intake | no | BCP-47 of the turns as written: "en" (default) or "es". |
matter | intake | yes | name, external_id, practice_area, jurisdiction, submitted_by ("counsel" or "client") — all optional inside. |
turns[] | intake | yes | The conversation, 1-based n, speaker "lawyer" or "client", text, optional cites (fact ids). This is what the dossier is built on; eight substantive turns is a good floor. |
facts[] | intake | no | Each with id, text, a source (document + page, or turn, with a quote), said_by, and a basis: firsthand, recorded, reported, alleged, finding, opinion, instruction. |
documents[] | intake | no | What the facts cite: id, filename, media_type, sha256, pages, ref. Send the files themselves as multipart parts named by id, or let the record stand alone. |
produced_by | intake | no | Your producer's name, model and time — provenance on the record. |
What happens next
- The record is frozen at dispatch; new material later is a
supplement, never an edit to the record. - A record that is too thin to build from answers
intake_too_thin(422) with what is missing; one no engine covers answersnot_covered. Neither is billed. - Otherwise the request is
workingat stagebuildingwith an ETA, and completes withlinks.dossier.
Voice and other producers
A telephone intake after hours produces exactly this record with channel: "voice"; so does any interviewer you build. The contract is the boundary: whatever produced the conversation, the engine sees one shape.