DICOM Reports
Attach medical reports (PDF, DOC, DOCX, TXT) to specific DICOM studies inside a managed customer. The customer sees the report in their AI Lens patient view; you keep an auditable trail.
How it works
- The customer's DICOM studies are already in BigMind (uploaded by their agent).
- Your PACS system knows the
studyInstanceUidof the study you want to attach a report to. - You
POSTthe report file to the study endpoint — single multipart request, no presigned URLs. - BigMind links it to the study's patient entity, posts a visibility comment in the customer's AI Lens timeline, and fires a
dicom.report.attachedwebhook. - Reports count against the customer's storage quota — no partner credit deduction.
Upload a report — the one-liner
If you already know the customer's customerId and the DICOM studyInstanceUid, this is the entire upload:
curl -X POST "https://app.bigmind.com/api/partner/v1/customers/<customerId>/dicom-studies/<studyInstanceUid>/reports" \
-H "Authorization: Bearer sk_live_..." \
-F "file=@./radiology-report.pdf" \
-F "title=Radiology Report" \
-F "reportType=radiology"Full reference for this endpoint is below at POST /dicom-studies/{studyInstanceUid}/reports. Need the customer's studies first? See List studies.
Complete workflow — discover, upload, fetch, detach
End-to-end script — list a customer's studies, attach a report to the first one, fetch the signed download URL, then detach.
KEY="sk_live_..."
CUSTOMER="pc_42_..."
BASE="https://app.bigmind.com/api/partner/v1"
# 1. Find a study
STUDY=$(curl -s -H "Authorization: Bearer $KEY" \
"$BASE/customers/$CUSTOMER/dicom-studies?limit=1" \
| jq -r '.data.studies[0].studyInstanceUid')
# 2. Upload the report
RESPONSE=$(curl -s -X POST "$BASE/customers/$CUSTOMER/dicom-studies/$STUDY/reports" \
-H "Authorization: Bearer $KEY" \
-F "file=@./report.pdf" \
-F "title=Radiology Report" \
-F "reportType=radiology")
REPORT_ID=$(echo "$RESPONSE" | jq -r '.data.reportId')
# 3. Get a signed download URL (expires in 5 minutes)
curl -s -H "Authorization: Bearer $KEY" \
"$BASE/customers/$CUSTOMER/reports/$REPORT_ID" \
| jq '.data.downloadUrl'
# 4. Detach when no longer needed
curl -s -X DELETE -H "Authorization: Bearer $KEY" \
"$BASE/customers/$CUSTOMER/reports/$REPORT_ID"/v1/customers/{customerId}/dicom-studiesList the customer's DICOM studies. Paginated, filterable by date / modality / body part / patient text.
| Name | Type | Description |
|---|---|---|
page | integer | Default 1. |
limit | integer (1–200) | Default 20. |
from | ISO 8601 datetime | Only studies indexed after this time. |
to | ISO 8601 datetime | Only studies indexed before this time. |
modality | string | DICOM modality (e.g., "CT", "MR", "CR"). |
bodyPart | string | DICOM body part examined (e.g., "CHEST"). |
q | string | Free-text match against patient name / patient ID / study description. |
curl -H "Authorization: Bearer sk_live_..." \
"https://app.bigmind.com/api/partner/v1/customers/pc_42_.../dicom-studies?modality=CT&limit=50"Studies with entityId: null have been uploaded but aren't yet indexed in AI Lens. You can't attach reports to those until the customer enables AI Lens Medical and indexing completes.
/v1/customers/{customerId}/dicom-studies/{studyInstanceUid}Get a single study + linked entity + report count.
curl -H "Authorization: Bearer sk_live_..." \
"https://app.bigmind.com/api/partner/v1/customers/pc_42_.../dicom-studies/1.2.840.113619.2.55..."STUDY_NOT_FOUND (404) is returned when the study UID doesn't exist in this customer, or hasn't been indexed yet. The response is intentionally identical for both cases — no cross-tenant information leak.
/v1/customers/{customerId}/dicom-studies/{studyInstanceUid}/reportsUpload a medical report and attach it to a DICOM study.
Body (multipart/form-data)
| Name | Type | Description |
|---|---|---|
filerequired | binary | PDF, DOC, DOCX, or TXT. Max 25 MB. |
title | string | Display title for the report. Defaults to the filename. |
reportType | "radiology" | "consultation" | "summary" | "lab" | "other" | Optional. Default: "other". |
isPrimary | boolean | Mark this as the primary report for the study. |
silent | boolean | If true, skip the visibility comment in the AI Lens timeline. |
curl -X POST "https://app.bigmind.com/api/partner/v1/customers/pc_42_.../dicom-studies/1.2.840.../reports" \
-H "Authorization: Bearer sk_live_..." \
-F "file=@/path/to/report.pdf" \
-F "title=Radiology Report" \
-F "reportType=radiology"Common error codes: STUDY_NOT_FOUND (404), FILE_TOO_LARGE (400), INVALID_REPORT_TYPE (400), STORAGE_FULL (402, returns customer storage breakdown).
/v1/customers/{customerId}/dicom-studies/{studyInstanceUid}/reportsList reports already attached to a study (partner-uploaded + user-uploaded).
curl -H "Authorization: Bearer sk_live_..." \
"https://app.bigmind.com/api/partner/v1/customers/pc_42_.../dicom-studies/1.2.840.../reports"attachedByPartnerKeyId is null for reports uploaded directly by the customer (via the BigMind dashboard).
/v1/customers/{customerId}/reports/{reportId}Report metadata + short-lived signed download URL (5-minute TTL).
curl -H "Authorization: Bearer sk_live_..." \
"https://app.bigmind.com/api/partner/v1/customers/pc_42_.../reports/alf_..."The downloadUrl is presigned and time-bound. Don't cache it past downloadUrlExpiresInSeconds.
/v1/customers/{customerId}/reports/{reportId}Detach a report. Partner may only delete reports attached via the Partner API — not user-uploaded files.
curl -X DELETE "https://app.bigmind.com/api/partner/v1/customers/pc_42_.../reports/alf_..." \
-H "Authorization: Bearer sk_live_..."Attempting to delete a user-uploaded file returns FORBIDDEN (403). Partner-API safety: scoped to reports your key originally attached.