BigMindBigMindBigMind
Partner APIBETA
Sign inGet an API key
Partner APIBETA
OverviewAuthenticationCustomersPlansAccount & UsageDICOM ReportsWebhooksError codesChangelog

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

  1. The customer's DICOM studies are already in BigMind (uploaded by their agent).
  2. Your PACS system knows the studyInstanceUid of the study you want to attach a report to.
  3. You POST the report file to the study endpoint — single multipart request, no presigned URLs.
  4. 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.attached webhook.
  5. 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"
GET/v1/customers/{customerId}/dicom-studies

List the customer's DICOM studies. Paginated, filterable by date / modality / body part / patient text.

NameTypeDescription
pageintegerDefault 1.
limitinteger (1–200)Default 20.
fromISO 8601 datetimeOnly studies indexed after this time.
toISO 8601 datetimeOnly studies indexed before this time.
modalitystringDICOM modality (e.g., "CT", "MR", "CR").
bodyPartstringDICOM body part examined (e.g., "CHEST").
qstringFree-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.

GET/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.

POST/v1/customers/{customerId}/dicom-studies/{studyInstanceUid}/reports

Upload a medical report and attach it to a DICOM study.

Body (multipart/form-data)

NameTypeDescription
filerequiredbinaryPDF, DOC, DOCX, or TXT. Max 25 MB.
titlestringDisplay title for the report. Defaults to the filename.
reportType"radiology" | "consultation" | "summary" | "lab" | "other"Optional. Default: "other".
isPrimarybooleanMark this as the primary report for the study.
silentbooleanIf 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).

GET/v1/customers/{customerId}/dicom-studies/{studyInstanceUid}/reports

List 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).

GET/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.

DELETE/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.