Skip to content
Start a Dossier
Developers

External intake: submit a finished record

You already interviewed the client — in your own form, your chat, your phone system. Send the record and Codossier builds the dossier from it directly, without re-reading or re-asking.

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.

POST /v1/requests with an intake record
{
  "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" }
  }
}
FieldWhereRequiredMeaning
channelintakeyes"direct" for a record you produced. (Codossier's own producers write "chat", "voice", "drop".)
languageintakenoBCP-47 of the turns as written: "en" (default) or "es".
matterintakeyesname, external_id, practice_area, jurisdiction, submitted_by ("counsel" or "client") — all optional inside.
turns[]intakeyesThe 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[]intakenoEach 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[]intakenoWhat 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_byintakenoYour 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 answers not_covered. Neither is billed.
  • Otherwise the request is working at stage building with an ETA, and completes with links.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.