Create Report
Create a new cross examination questions report by uploading expert CVs and depositions along with case parameters.
ExpertData Structure
Each expert witness includes the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
discipline | enum | Yes | ACCIDENT_RECONSTRUCTION, BIOMECHANICS, or BOTH |
cvFileId | string | No* | File ID for expert's CV (uploaded via FileService) |
depositionFileId | string | No* | File ID for expert's deposition transcript |
*At least one file (CV or deposition) is required per expert
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
caseId | string | Yes | Case ID to associate the report with |
attorneySide | enum | Yes | PLAINTIFF or DEFENSE |
proceedingType | enum | Yes | DEPOSITION or TRIAL |
questionSpecificity | enum | Yes | GENERAL or GENERAL_AND_SPECIFIC |
experts | ExpertData[] | Yes | Array of expert witness data (1-10 experts) |
Response
Returns:
reportId: Unique report identifier for status polling
Examples
Single Expert - Biomechanics
- Go
- TypeScript
import "github.com/silentwitness/go-sdk"
silentwitness.Key = "sk_test_..."
// First, upload expert files
cvFile, err := silentwitness.Files.Upload(ctx, &silentwitness.UploadFileRequest{
Content: cvBytes,
Filename: "expert_cv.pdf",
Purpose: "cross_exam_expert_cv",
CaseId: "case_xyz789",
})
depositionFile, err := silentwitness.Files.Upload(ctx, &silentwitness.UploadFileRequest{
Content: depositionBytes,
Filename: "expert_deposition.pdf",
Purpose: "cross_exam_expert_deposition",
CaseId: "case_xyz789",
})
// Create cross examination report
response, err := silentwitness.CrossExamination.CreateReport(ctx, &silentwitness.CreateCrossExaminationReportRequest{
CaseId: "case_xyz789",
AttorneySide: silentwitness.AttorneySidePlaintiff,
ProceedingType: silentwitness.ProceedingTypeDeposition,
QuestionSpecificity: silentwitness.QuestionSpecificityGeneralAndSpecific,
Experts: []silentwitness.ExpertData{
{
Discipline: silentwitness.ExpertDisciplineBiomechanics,
CvFileId: silentwitness.String(cvFile.FileId),
DepositionFileId: silentwitness.String(depositionFile.FileId),
},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Report ID: %s\n", response.ReportId)
import {
setApiKey,
uploadFile,
createCrossExaminationReport,
AttorneySide,
ProceedingType,
QuestionSpecificity,
ExpertDiscipline
} from "@silentwitness/typescript-sdk";
setApiKey("sk_test_...");
// First, upload expert files
const cvFile = await uploadFile({
content: cvBytes,
filename: "expert_cv.pdf",
purpose: "cross_exam_expert_cv",
caseId: "case_xyz789"
});
const depositionFile = await uploadFile({
content: depositionBytes,
filename: "expert_deposition.pdf",
purpose: "cross_exam_expert_deposition",
caseId: "case_xyz789"
});
// Create cross examination report
const response = await createCrossExaminationReport({
caseId: "case_xyz789",
attorneySide: AttorneySide.PLAINTIFF,
proceedingType: ProceedingType.DEPOSITION,
questionSpecificity: QuestionSpecificity.GENERAL_AND_SPECIFIC,
experts: [
{
discipline: ExpertDiscipline.BIOMECHANICS,
cvFileId: cvFile.fileId,
depositionFileId: depositionFile.fileId
}
]
});
console.log(`Report ID: ${response.reportId}`);
Multiple Experts - Different Disciplines
- Go
- TypeScript
import "github.com/silentwitness/go-sdk"
silentwitness.Key = "sk_test_..."
// Upload files for multiple experts
bioCV, _ := silentwitness.Files.Upload(ctx, &silentwitness.UploadFileRequest{
Content: bioCVBytes,
Filename: "biomechanics_expert_cv.pdf",
Purpose: "cross_exam_expert_cv",
CaseId: "case_xyz789",
})
arCV, _ := silentwitness.Files.Upload(ctx, &silentwitness.UploadFileRequest{
Content: arCVBytes,
Filename: "accident_recon_cv.pdf",
Purpose: "cross_exam_expert_cv",
CaseId: "case_xyz789",
})
arDepo, _ := silentwitness.Files.Upload(ctx, &silentwitness.UploadFileRequest{
Content: arDepoBytes,
Filename: "accident_recon_deposition.pdf",
Purpose: "cross_exam_expert_deposition",
CaseId: "case_xyz789",
})
// Create report for multiple experts
response, err := silentwitness.CrossExamination.CreateReport(ctx, &silentwitness.CreateCrossExaminationReportRequest{
CaseId: "case_xyz789",
AttorneySide: silentwitness.AttorneySideDefense,
ProceedingType: silentwitness.ProceedingTypeTrial,
QuestionSpecificity: silentwitness.QuestionSpecificityGeneral,
Experts: []silentwitness.ExpertData{
{
Discipline: silentwitness.ExpertDisciplineBiomechanics,
CvFileId: silentwitness.String(bioCV.FileId),
},
{
Discipline: silentwitness.ExpertDisciplineAccidentReconstruction,
CvFileId: silentwitness.String(arCV.FileId),
DepositionFileId: silentwitness.String(arDepo.FileId),
},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Report ID: %s\n", response.ReportId)
import {
setApiKey,
uploadFile,
createCrossExaminationReport,
AttorneySide,
ProceedingType,
QuestionSpecificity,
ExpertDiscipline
} from "@silentwitness/typescript-sdk";
setApiKey("sk_test_...");
// Upload files for multiple experts
const bioCV = await uploadFile({
content: bioCVBytes,
filename: "biomechanics_expert_cv.pdf",
purpose: "cross_exam_expert_cv",
caseId: "case_xyz789"
});
const arCV = await uploadFile({
content: arCVBytes,
filename: "accident_recon_cv.pdf",
purpose: "cross_exam_expert_cv",
caseId: "case_xyz789"
});
const arDepo = await uploadFile({
content: arDepoBytes,
filename: "accident_recon_deposition.pdf",
purpose: "cross_exam_expert_deposition",
caseId: "case_xyz789"
});
// Create report for multiple experts
const response = await createCrossExaminationReport({
caseId: "case_xyz789",
attorneySide: AttorneySide.DEFENSE,
proceedingType: ProceedingType.TRIAL,
questionSpecificity: QuestionSpecificity.GENERAL,
experts: [
{
discipline: ExpertDiscipline.BIOMECHANICS,
cvFileId: bioCV.fileId
},
{
discipline: ExpertDiscipline.ACCIDENT_RECONSTRUCTION,
cvFileId: arCV.fileId,
depositionFileId: arDepo.fileId
}
]
});
console.log(`Report ID: ${response.reportId}`);
CV Only - No Deposition
- Go
- TypeScript
import "github.com/silentwitness/go-sdk"
silentwitness.Key = "sk_test_..."
// Upload expert CV only
cvFile, err := silentwitness.Files.Upload(ctx, &silentwitness.UploadFileRequest{
Content: cvBytes,
Filename: "expert_cv.pdf",
Purpose: "cross_exam_expert_cv",
CaseId: "case_xyz789",
})
// Create report with CV only
response, err := silentwitness.CrossExamination.CreateReport(ctx, &silentwitness.CreateCrossExaminationReportRequest{
CaseId: "case_xyz789",
AttorneySide: silentwitness.AttorneySidePlaintiff,
ProceedingType: silentwitness.ProceedingTypeDeposition,
QuestionSpecificity: silentwitness.QuestionSpecificityGeneral,
Experts: []silentwitness.ExpertData{
{
Discipline: silentwitness.ExpertDisciplineBoth,
CvFileId: silentwitness.String(cvFile.FileId),
},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Report ID: %s\n", response.ReportId)
import {
setApiKey,
uploadFile,
createCrossExaminationReport,
AttorneySide,
ProceedingType,
QuestionSpecificity,
ExpertDiscipline
} from "@silentwitness/typescript-sdk";
setApiKey("sk_test_...");
// Upload expert CV only
const cvFile = await uploadFile({
content: cvBytes,
filename: "expert_cv.pdf",
purpose: "cross_exam_expert_cv",
caseId: "case_xyz789"
});
// Create report with CV only
const response = await createCrossExaminationReport({
caseId: "case_xyz789",
attorneySide: AttorneySide.PLAINTIFF,
proceedingType: ProceedingType.DEPOSITION,
questionSpecificity: QuestionSpecificity.GENERAL,
experts: [
{
discipline: ExpertDiscipline.BOTH,
cvFileId: cvFile.fileId
}
]
});
console.log(`Report ID: ${response.reportId}`);
File Purpose Values
When uploading expert documents, use these purpose values:
cross_exam_expert_cv: Expert curriculum vitae or resumecross_exam_expert_deposition: Expert deposition transcript
Errors
| Code | Description |
|---|---|
INVALID_ARGUMENT | Invalid parameters, missing required fields, or wrong file purposes |
NOT_FOUND | Case or file IDs not found |
PERMISSION_DENIED | Files or case not accessible by this account |
RESOURCE_EXHAUSTED | Rate limit exceeded |
UNAUTHENTICATED | Invalid or missing API key |