@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Orthanc API
@base https://orthanc.uclouvain.be/demo/
@version 1.12.11
@endpoints 299
@hint download_for_search
@toc changes(2), exports(2), instances(60), jobs(9), modalities(18), patients(42), peers(8), plugins(3), queries(14), series(42), statistics(1), storage-commitment(2), studies(43), system(1), tools(52)

@group changes
@endpoint DELETE /changes
@returns(200)

@endpoint GET /changes
@optional {last: num, limit: num, since: num, to: num, type: str}
@returns(200) {Changes: [map], Done: bool, First: num, Last: num}

@endgroup

@group exports
@endpoint DELETE /exports
@returns(200)

@endpoint GET /exports
@optional {limit: num, since: num}
@returns(200)

@endgroup

@group instances
@endpoint GET /instances
@optional {expand: str, full: bool, limit: num, requested-tags: str, response-content: str, short: bool, since: num}
@returns(200)

@endpoint POST /instances
@returns(200) {ID: str, ParentPatient: str, ParentSeries: str, ParentStudy: str, Path: str, Status: str}

@endpoint DELETE /instances/{id}
@required {id: str}
@returns(200)

@endpoint GET /instances/{id}
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint POST /instances/{id}/anonymize
@required {id: str}
@optional {DicomVersion: str, Force: bool, Keep: [str], KeepLabels: bool, KeepPrivateTags: bool, KeepSource: bool, LossyQuality: num, PrivateCreator: str, Remove: [str], Replace: map, Transcode: str}
@returns(200)

@endpoint GET /instances/{id}/attachments
@required {id: str}
@optional {full: str}
@returns(200)

@endpoint DELETE /instances/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /instances/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /instances/{id}/attachments/{name}/compress
@required {id: str, name: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/compressed-data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/compressed-md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/compressed-size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/info
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/is-compressed
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /instances/{id}/attachments/{name}/size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint POST /instances/{id}/attachments/{name}/uncompress
@required {id: str, name: str}
@returns(200)

@endpoint POST /instances/{id}/attachments/{name}/verify-md5
@required {id: str, name: str}
@returns(200)

@endpoint GET /instances/{id}/content/{path}
@required {id: str, path: str}
@returns(200)

@endpoint POST /instances/{id}/export
@required {id: str}
@returns(200)

@endpoint GET /instances/{id}/file
@required {id: str}
@optional {filename: str, lossy-quality: num, transcode: str, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/frames
@required {id: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}
@required {frame: str, id: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/image-int16
@required {frame: num, id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/image-uint16
@required {frame: num, id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/image-uint8
@required {frame: num, id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/matlab
@required {frame: num, id: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/numpy
@required {frame: num, id: str}
@optional {compress: bool, rescale: bool}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/preview
@required {frame: num, id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/raw
@required {frame: num, id: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/raw.gz
@required {frame: num, id: str}
@returns(200)

@endpoint GET /instances/{id}/frames/{frame}/rendered
@required {frame: num, id: str}
@optional {height: num, quality: num, returnUnsupportedImage: bool, smooth: bool, width: num, window-center: num, window-width: num, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/header
@required {id: str}
@optional {short: bool, simplify: bool}
@returns(200)

@endpoint GET /instances/{id}/image-int16
@required {id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/image-uint16
@required {id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/image-uint8
@required {id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/labels
@required {id: str}
@returns(200)

@endpoint DELETE /instances/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /instances/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint PUT /instances/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /instances/{id}/matlab
@required {id: str}
@returns(200)

@endpoint GET /instances/{id}/metadata
@required {id: str}
@optional {expand: str, numeric: str}
@returns(200)

@endpoint DELETE /instances/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /instances/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /instances/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /instances/{id}/modify
@required {id: str}
@optional {Force: bool, Keep: [str], KeepSource: bool, LossyQuality: num, PrivateCreator: str, Remove: [str], RemovePrivateTags: bool, Replace: map, Transcode: str}
@returns(200)

@endpoint GET /instances/{id}/module
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /instances/{id}/numpy
@required {id: str}
@optional {compress: bool, rescale: bool}
@returns(200)

@endpoint GET /instances/{id}/patient
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /instances/{id}/pdf
@required {id: str}
@returns(200)

@endpoint GET /instances/{id}/preview
@required {id: str}
@optional {quality: num, returnUnsupportedImage: bool, Accept: str}
@returns(200)

@endpoint POST /instances/{id}/reconstruct
@required {id: str}
@optional {LimitToThisLevelMainDicomTags: bool, ReconstructFiles: bool}
@returns(200)

@endpoint GET /instances/{id}/rendered
@required {id: str}
@optional {height: num, quality: num, returnUnsupportedImage: bool, smooth: bool, width: num, window-center: num, window-width: num, Accept: str}
@returns(200)

@endpoint GET /instances/{id}/series
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /instances/{id}/simplified-tags
@required {id: str}
@optional {ignore-length: [str], whole: bool}
@returns(200)

@endpoint GET /instances/{id}/statistics
@required {id: str}
@returns(200) {DicomDiskSize: str, DicomDiskSizeMB: num, DicomUncompressedSize: str, DicomUncompressedSizeMB: num, DiskSize: str, DiskSizeMB: num, UncompressedSize: str, UncompressedSizeMB: num}

@endpoint GET /instances/{id}/study
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /instances/{id}/tags
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool, whole: bool}
@returns(200)

@endgroup

@group jobs
@endpoint GET /jobs
@optional {expand: str}
@returns(200)

@endpoint DELETE /jobs/{id}
@required {id: str}
@returns(200)

@endpoint GET /jobs/{id}
@required {id: str}
@returns(200)

@endpoint POST /jobs/{id}/cancel
@required {id: str}
@returns(200)

@endpoint POST /jobs/{id}/pause
@required {id: str}
@returns(200)

@endpoint POST /jobs/{id}/resubmit
@required {id: str}
@returns(200)

@endpoint POST /jobs/{id}/resume
@required {id: str}
@returns(200)

@endpoint DELETE /jobs/{id}/{key}
@required {id: str, key: str}
@returns(200)

@endpoint GET /jobs/{id}/{key}
@required {id: str, key: str}
@returns(200)

@endgroup

@group modalities
@endpoint GET /modalities
@optional {expand: str}
@returns(200)

@endpoint DELETE /modalities/{id}
@required {id: str}
@returns(200)

@endpoint GET /modalities/{id}
@required {id: str}
@returns(200)

@endpoint PUT /modalities/{id}
@required {id: str}
@optional {AET: str, AllowEcho: bool, AllowFind: bool, AllowFindWorklist: bool, AllowGet: bool, AllowMove: bool, AllowStorageCommitment: bool, AllowStore: bool, AllowTranscoding: bool, Host: str, LocalAet: str, Manufacturer: str, Port: num, Timeout: num, UseDicomTls: bool}
@returns(200)

@endpoint GET /modalities/{id}/configuration
@required {id: str}
@returns(200)

@endpoint POST /modalities/{id}/echo
@required {id: str}
@optional {CheckFind: bool, Timeout: num}
@returns(200)

@endpoint POST /modalities/{id}/find
@required {id: str}
@returns(200)

@endpoint POST /modalities/{id}/find-instance
@required {id: str}
@returns(200)

@endpoint POST /modalities/{id}/find-patient
@required {id: str}
@returns(200)

@endpoint POST /modalities/{id}/find-series
@required {id: str}
@returns(200)

@endpoint POST /modalities/{id}/find-study
@required {id: str}
@returns(200)

@endpoint POST /modalities/{id}/find-worklist
@required {id: str}
@optional {Full: bool, Query: map, Short: bool}
@returns(200)

@endpoint POST /modalities/{id}/get
@required {id: str}
@optional {Asynchronous: bool, Level: str, LocalAet: str, Permissive: bool, Priority: num, Resources: [map], Synchronous: bool, Timeout: num, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint POST /modalities/{id}/move
@required {id: str}
@optional {Asynchronous: bool, Level: str, LocalAet: str, Permissive: bool, Priority: num, Resources: [map], Synchronous: bool, TargetAet: str, Timeout: num, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint POST /modalities/{id}/query
@required {id: str}
@optional {Level: str, LocalAet: str, Normalize: bool, Query: map, Timeout: num}
@returns(200) {ID: str, Path: str}

@endpoint POST /modalities/{id}/storage-commitment
@required {id: str}
@optional {DicomInstances: [map], Resources: [str], Timeout: num}
@returns(200) {ID: map, Path: map}

@endpoint POST /modalities/{id}/store
@required {id: str}
@optional {Asynchronous: bool, CalledAet: str, Host: str, LocalAet: str, MoveOriginatorAet: str, MoveOriginatorID: num, Permissive: bool, Port: num, Priority: num, Resources: [str], StorageCommitment: bool, Synchronous: bool, Timeout: num, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint POST /modalities/{id}/store-straight
@required {id: str}
@returns(200) {SOPClassUID: str, SOPInstanceUID: str}

@endgroup

@group patients
@endpoint GET /patients
@optional {expand: str, full: bool, limit: num, requested-tags: str, response-content: str, short: bool, since: num}
@returns(200)

@endpoint DELETE /patients/{id}
@required {id: str}
@returns(200)

@endpoint GET /patients/{id}
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint POST /patients/{id}/anonymize
@required {id: str}
@optional {Asynchronous: bool, DicomVersion: str, Force: bool, Keep: [str], KeepLabels: bool, KeepPrivateTags: bool, KeepSource: bool, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], Replace: map, Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /patients/{id}/archive
@required {id: str}
@optional {filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /patients/{id}/archive
@required {id: str}
@optional {Asynchronous: bool, Filename: str, LossyQuality: num, Priority: num, Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint GET /patients/{id}/attachments
@required {id: str}
@optional {full: str}
@returns(200)

@endpoint DELETE /patients/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /patients/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /patients/{id}/attachments/{name}/compress
@required {id: str, name: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/compressed-data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/compressed-md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/compressed-size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/info
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/is-compressed
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /patients/{id}/attachments/{name}/size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint POST /patients/{id}/attachments/{name}/uncompress
@required {id: str, name: str}
@returns(200)

@endpoint POST /patients/{id}/attachments/{name}/verify-md5
@required {id: str, name: str}
@returns(200)

@endpoint GET /patients/{id}/instances
@required {id: str}
@optional {expand: str, full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /patients/{id}/instances-tags
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /patients/{id}/labels
@required {id: str}
@returns(200)

@endpoint DELETE /patients/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /patients/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint PUT /patients/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /patients/{id}/media
@required {id: str}
@optional {extended: str, filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /patients/{id}/media
@required {id: str}
@optional {Asynchronous: bool, Extended: bool, Filename: str, LossyQuality: num, Priority: num, Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint GET /patients/{id}/metadata
@required {id: str}
@optional {expand: str, numeric: str}
@returns(200)

@endpoint DELETE /patients/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /patients/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /patients/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /patients/{id}/modify
@required {id: str}
@optional {Asynchronous: bool, Force: bool, Keep: [str], KeepSource: bool, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], RemovePrivateTags: bool, Replace: map, Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /patients/{id}/module
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /patients/{id}/protected
@required {id: str}
@returns(200)

@endpoint PUT /patients/{id}/protected
@required {id: str}
@returns(200)

@endpoint POST /patients/{id}/reconstruct
@required {id: str}
@optional {LimitToThisLevelMainDicomTags: bool, ReconstructFiles: bool}
@returns(200)

@endpoint GET /patients/{id}/series
@required {id: str}
@optional {expand: str, full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /patients/{id}/shared-tags
@required {id: str}
@optional {short: bool, simplify: bool}
@returns(200)

@endpoint GET /patients/{id}/statistics
@required {id: str}
@returns(200) {CountInstances: num, CountSeries: num, CountStudies: num, DicomDiskSize: str, DicomDiskSizeMB: num, DicomUncompressedSize: str, DicomUncompressedSizeMB: num, DiskSize: str, DiskSizeMB: num, UncompressedSize: str, UncompressedSizeMB: num}

@endpoint GET /patients/{id}/studies
@required {id: str}
@optional {expand: str, full: bool, requested-tags: str, short: bool}
@returns(200)

@endgroup

@group peers
@endpoint GET /peers
@optional {expand: str}
@returns(200)

@endpoint DELETE /peers/{id}
@required {id: str}
@returns(200)

@endpoint GET /peers/{id}
@required {id: str}
@returns(200)

@endpoint PUT /peers/{id}
@required {id: str}
@optional {CertificateFile: str, CertificateKeyFile: str, CertificateKeyPassword: str, HttpHeaders: map, Password: str, URL: str, Username: str}
@returns(200)

@endpoint GET /peers/{id}/configuration
@required {id: str}
@returns(200)

@endpoint POST /peers/{id}/store
@required {id: str}
@optional {Asynchronous: bool, Compress: bool, Permissive: bool, Priority: num, Resources: [str], Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint POST /peers/{id}/store-straight
@required {id: str}
@returns(200) {ID: str, ParentPatient: str, ParentSeries: str, ParentStudy: str, Path: str, Status: str}

@endpoint GET /peers/{id}/system
@required {id: str}
@returns(200)

@endgroup

@group plugins
@endpoint GET /plugins
@returns(200)

@endpoint GET /plugins/explorer.js
@returns(200)

@endpoint GET /plugins/{id}
@required {id: str}
@returns(200)

@endgroup

@group queries
@endpoint GET /queries
@returns(200)

@endpoint DELETE /queries/{id}
@required {id: str}
@returns(200)

@endpoint GET /queries/{id}
@required {id: str}
@returns(200)

@endpoint GET /queries/{id}/answers
@required {id: str}
@optional {expand: str, short: bool, simplify: bool}
@returns(200)

@endpoint GET /queries/{id}/answers/{index}
@required {id: str, index: str}
@returns(200)

@endpoint GET /queries/{id}/answers/{index}/content
@required {id: str, index: str}
@optional {short: bool, simplify: bool}
@returns(200)

@endpoint POST /queries/{id}/answers/{index}/query-instances
@required {id: str, index: str}
@optional {Query: map, Timeout: num}
@returns(200) {ID: map, Path: map}

@endpoint POST /queries/{id}/answers/{index}/query-series
@required {id: str, index: str}
@optional {Query: map, Timeout: num}
@returns(200) {ID: map, Path: map}

@endpoint POST /queries/{id}/answers/{index}/query-studies
@required {id: str, index: str}
@optional {Query: map, Timeout: num}
@returns(200) {ID: map, Path: map}

@endpoint POST /queries/{id}/answers/{index}/retrieve
@required {id: str, index: str}
@optional {Asynchronous: bool, Full: bool, Permissive: bool, Priority: num, RetrieveMethod: str, Simplify: bool, Synchronous: bool, TargetAet: str, Timeout: num, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /queries/{id}/level
@required {id: str}
@returns(200)

@endpoint GET /queries/{id}/modality
@required {id: str}
@returns(200)

@endpoint GET /queries/{id}/query
@required {id: str}
@optional {short: bool, simplify: bool}
@returns(200)

@endpoint POST /queries/{id}/retrieve
@required {id: str}
@optional {Asynchronous: bool, Full: bool, Permissive: bool, Priority: num, RetrieveMethod: str, Simplify: bool, Synchronous: bool, TargetAet: str, Timeout: num, UserData: map}
@returns(200) {ID: str, Path: str}

@endgroup

@group series
@endpoint GET /series
@optional {expand: str, full: bool, limit: num, requested-tags: str, response-content: str, short: bool, since: num}
@returns(200)

@endpoint DELETE /series/{id}
@required {id: str}
@returns(200)

@endpoint GET /series/{id}
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint POST /series/{id}/anonymize
@required {id: str}
@optional {Asynchronous: bool, DicomVersion: str, Force: bool, Keep: [str], KeepLabels: bool, KeepPrivateTags: bool, KeepSource: bool, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], Replace: map, Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /series/{id}/archive
@required {id: str}
@optional {filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /series/{id}/archive
@required {id: str}
@optional {Asynchronous: bool, Filename: str, LossyQuality: num, Priority: num, Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint GET /series/{id}/attachments
@required {id: str}
@optional {full: str}
@returns(200)

@endpoint DELETE /series/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /series/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /series/{id}/attachments/{name}/compress
@required {id: str, name: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/compressed-data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/compressed-md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/compressed-size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/info
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/is-compressed
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /series/{id}/attachments/{name}/size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint POST /series/{id}/attachments/{name}/uncompress
@required {id: str, name: str}
@returns(200)

@endpoint POST /series/{id}/attachments/{name}/verify-md5
@required {id: str, name: str}
@returns(200)

@endpoint GET /series/{id}/instances
@required {id: str}
@optional {expand: str, full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /series/{id}/instances-tags
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /series/{id}/labels
@required {id: str}
@returns(200)

@endpoint DELETE /series/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /series/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint PUT /series/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /series/{id}/media
@required {id: str}
@optional {extended: str, filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /series/{id}/media
@required {id: str}
@optional {Asynchronous: bool, Extended: bool, Filename: str, LossyQuality: num, Priority: num, Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint GET /series/{id}/metadata
@required {id: str}
@optional {expand: str, numeric: str}
@returns(200)

@endpoint DELETE /series/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /series/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /series/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /series/{id}/modify
@required {id: str}
@optional {Asynchronous: bool, Force: bool, Keep: [str], KeepSource: bool, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], RemovePrivateTags: bool, Replace: map, Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /series/{id}/module
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /series/{id}/numpy
@required {id: str}
@optional {compress: bool, rescale: bool}
@returns(200)

@endpoint GET /series/{id}/ordered-slices
@required {id: str}
@returns(200) {Dicom: [str], Slices: [str], SlicesShort: [map], Type: str}

@endpoint GET /series/{id}/patient
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint POST /series/{id}/reconstruct
@required {id: str}
@optional {LimitToThisLevelMainDicomTags: bool, ReconstructFiles: bool}
@returns(200)

@endpoint GET /series/{id}/shared-tags
@required {id: str}
@optional {short: bool, simplify: bool}
@returns(200)

@endpoint GET /series/{id}/statistics
@required {id: str}
@returns(200) {CountInstances: num, DicomDiskSize: str, DicomDiskSizeMB: num, DicomUncompressedSize: str, DicomUncompressedSizeMB: num, DiskSize: str, DiskSizeMB: num, UncompressedSize: str, UncompressedSizeMB: num}

@endpoint GET /series/{id}/study
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endgroup

@group statistics
@endpoint GET /statistics
@returns(200) {CountInstances: num, CountPatients: num, CountSeries: num, CountStudies: num, TotalDiskSize: str, TotalDiskSizeMB: num, TotalUncompressedSize: str, TotalUncompressedSizeMB: num}

@endgroup

@group storage-commitment
@endpoint GET /storage-commitment/{id}
@required {id: str}
@returns(200) {Failures: [map], RemoteAET: str, Status: str, Success: [map]}

@endpoint POST /storage-commitment/{id}/remove
@required {id: str}
@returns(200)

@endgroup

@group studies
@endpoint GET /studies
@optional {expand: str, full: bool, limit: num, requested-tags: str, response-content: str, short: bool, since: num}
@returns(200)

@endpoint DELETE /studies/{id}
@required {id: str}
@returns(200)

@endpoint GET /studies/{id}
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint POST /studies/{id}/anonymize
@required {id: str}
@optional {Asynchronous: bool, DicomVersion: str, Force: bool, Keep: [str], KeepLabels: bool, KeepPrivateTags: bool, KeepSource: bool, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], Replace: map, Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /studies/{id}/archive
@required {id: str}
@optional {filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /studies/{id}/archive
@required {id: str}
@optional {Asynchronous: bool, Filename: str, LossyQuality: num, Priority: num, Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint GET /studies/{id}/attachments
@required {id: str}
@optional {full: str}
@returns(200)

@endpoint DELETE /studies/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /studies/{id}/attachments/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /studies/{id}/attachments/{name}/compress
@required {id: str, name: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/compressed-data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/compressed-md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/compressed-size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/data
@required {id: str, name: str}
@optional {filename: str, Content-Range: str, If-None-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/info
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/is-compressed
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/md5
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint GET /studies/{id}/attachments/{name}/size
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint POST /studies/{id}/attachments/{name}/uncompress
@required {id: str, name: str}
@returns(200)

@endpoint POST /studies/{id}/attachments/{name}/verify-md5
@required {id: str, name: str}
@returns(200)

@endpoint GET /studies/{id}/instances
@required {id: str}
@optional {expand: str, full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /studies/{id}/instances-tags
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /studies/{id}/labels
@required {id: str}
@returns(200)

@endpoint DELETE /studies/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /studies/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint PUT /studies/{id}/labels/{label}
@required {id: str, label: str}
@returns(200)

@endpoint GET /studies/{id}/media
@required {id: str}
@optional {extended: str, filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /studies/{id}/media
@required {id: str}
@optional {Asynchronous: bool, Extended: bool, Filename: str, LossyQuality: num, Priority: num, Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint POST /studies/{id}/merge
@required {id: str}
@optional {Asynchronous: bool, KeepSource: bool, Permissive: bool, Priority: num, Resources: [str], Synchronous: bool, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /studies/{id}/metadata
@required {id: str}
@optional {expand: str, numeric: str}
@returns(200)

@endpoint DELETE /studies/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint GET /studies/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-None-Match: str}
@returns(200)

@endpoint PUT /studies/{id}/metadata/{name}
@required {id: str, name: str}
@optional {If-Match: str}
@returns(200)

@endpoint POST /studies/{id}/modify
@required {id: str}
@optional {Asynchronous: bool, Force: bool, Keep: [str], KeepSource: bool, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], RemovePrivateTags: bool, Replace: map, Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /studies/{id}/module
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /studies/{id}/module-patient
@required {id: str}
@optional {ignore-length: [str], short: bool, simplify: bool}
@returns(200)

@endpoint GET /studies/{id}/patient
@required {id: str}
@optional {full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint POST /studies/{id}/reconstruct
@required {id: str}
@optional {LimitToThisLevelMainDicomTags: bool, ReconstructFiles: bool}
@returns(200)

@endpoint GET /studies/{id}/series
@required {id: str}
@optional {expand: str, full: bool, requested-tags: str, short: bool}
@returns(200)

@endpoint GET /studies/{id}/shared-tags
@required {id: str}
@optional {short: bool, simplify: bool}
@returns(200)

@endpoint POST /studies/{id}/split
@required {id: str}
@optional {Asynchronous: bool, Instances: [str], KeepLabels: bool, KeepSource: bool, Permissive: bool, Priority: num, Remove: [str], Replace: map, Series: [str], Synchronous: bool, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /studies/{id}/statistics
@required {id: str}
@returns(200) {CountInstances: num, CountSeries: num, DicomDiskSize: str, DicomDiskSizeMB: num, DicomUncompressedSize: str, DicomUncompressedSizeMB: num, DiskSize: str, DiskSizeMB: num, UncompressedSize: str, UncompressedSizeMB: num}

@endgroup

@group system
@endpoint GET /system
@returns(200) {ApiVersion: num, Capabilities: map, CheckRevisions: bool, DatabaseBackendPlugin: str, DatabaseServerIdentifier: str, DatabaseVersion: num, DicomAet: str, DicomDefaultRetrieveMethod: str, DicomPort: num, HasLabels: bool, HttpPort: num, IngestTranscoding: str, IsHttpServerSecure: bool, MainDicomTags: map, MaximumPatientCount: num, MaximumStorageMode: str, MaximumStorageSize: num, Name: str, OverwriteInstances: bool, PatientLevelEnabled: bool, PluginsEnabled: bool, ReadOnly: bool, StorageAreaPlugin: str, StorageCompression: bool, UserMetadata: map, Version: str}

@endgroup

@group tools
@endpoint GET /tools
@returns(200)

@endpoint GET /tools/accepted-sop-classes
@returns(200)

@endpoint GET /tools/accepted-transfer-syntaxes
@returns(200)

@endpoint PUT /tools/accepted-transfer-syntaxes
@returns(200)

@endpoint POST /tools/bulk-anonymize
@optional {Asynchronous: bool, DicomVersion: str, Force: bool, Keep: [str], KeepLabels: bool, KeepPrivateTags: bool, KeepSource: bool, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], Replace: map, Resources: [str], Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint POST /tools/bulk-content
@optional {Full: bool, Level: str, Metadata: bool, Resources: [str], Short: bool}
@returns(200)

@endpoint POST /tools/bulk-delete
@optional {Resources: [str]}
@returns(200)

@endpoint POST /tools/bulk-modify
@optional {Asynchronous: bool, Force: bool, Keep: [str], KeepSource: bool, Level: str, LossyQuality: num, Permissive: bool, Priority: num, PrivateCreator: str, Remove: [str], RemovePrivateTags: bool, Replace: map, Resources: [str], Synchronous: bool, Transcode: str, UserData: map}
@returns(200) {ID: str, Path: str}

@endpoint POST /tools/count-resources
@optional {Full: bool, Labels: [str], LabelsConstraint: str, Level: str, MetadataQuery: map, ParentPatient: str, ParentSeries: str, ParentStudy: str, Query: map, Short: bool}
@returns(200)

@endpoint GET /tools/create-archive
@required {resources: str}
@optional {filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /tools/create-archive
@optional {Asynchronous: bool, Filename: str, LossyQuality: num, Priority: num, Resources: [str], Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint POST /tools/create-dicom
@optional {Content: str, Encapsulate: bool, Force: bool, InterpretBinaryTags: bool, Parent: str, PrivateCreator: str, Tags: map}
@returns(200) {ID: str, Path: str}

@endpoint GET /tools/create-media
@required {resources: str}
@optional {filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /tools/create-media
@optional {Asynchronous: bool, Extended: bool, Filename: str, LossyQuality: num, Priority: num, Resources: [str], Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint GET /tools/create-media-extended
@required {resources: str}
@optional {filename: str, lossy-quality: num, transcode: str}
@returns(200)

@endpoint POST /tools/create-media-extended
@optional {Asynchronous: bool, Extended: bool, Filename: str, LossyQuality: num, Priority: num, Resources: [str], Synchronous: bool, Transcode: str, UserData: map, Utf8: bool}
@returns(200) {ID: str, Path: str}

@endpoint GET /tools/default-encoding
@returns(200)

@endpoint PUT /tools/default-encoding
@returns(200)

@endpoint GET /tools/dicom-conformance
@returns(200)

@endpoint POST /tools/dicom-echo
@optional {AET: str, CheckFind: bool, Host: str, LocalAet: str, Manufacturer: str, Port: num, Timeout: num, UseDicomTls: bool}
@returns(200)

@endpoint POST /tools/execute-script
@returns(200)

@endpoint POST /tools/find
@optional {CaseSensitive: bool, Expand: bool, Full: bool, Labels: [str], LabelsConstraint: str, Level: str, Limit: num, MetadataQuery: map, OrderBy: [map], ParentPatient: str, ParentSeries: str, ParentStudy: str, Query: map, RequestedTags: [str], ResponseContent: [str], Short: bool, Since: num}
@returns(200)

@endpoint GET /tools/generate-uid
@required {level: str}
@returns(200)

@endpoint POST /tools/invalidate-tags
@returns(200)

@endpoint GET /tools/labels
@returns(200)

@endpoint GET /tools/log-level
@returns(200)

@endpoint PUT /tools/log-level
@returns(200)

@endpoint GET /tools/log-level-dicom
@returns(200)

@endpoint PUT /tools/log-level-dicom
@returns(200)

@endpoint GET /tools/log-level-generic
@returns(200)

@endpoint PUT /tools/log-level-generic
@returns(200)

@endpoint GET /tools/log-level-http
@returns(200)

@endpoint PUT /tools/log-level-http
@returns(200)

@endpoint GET /tools/log-level-jobs
@returns(200)

@endpoint PUT /tools/log-level-jobs
@returns(200)

@endpoint GET /tools/log-level-lua
@returns(200)

@endpoint PUT /tools/log-level-lua
@returns(200)

@endpoint GET /tools/log-level-plugins
@returns(200)

@endpoint PUT /tools/log-level-plugins
@returns(200)

@endpoint GET /tools/log-level-sqlite
@returns(200)

@endpoint PUT /tools/log-level-sqlite
@returns(200)

@endpoint POST /tools/lookup
@returns(200)

@endpoint GET /tools/metrics
@returns(200)

@endpoint PUT /tools/metrics
@returns(200)

@endpoint GET /tools/metrics-prometheus
@returns(200)

@endpoint GET /tools/now
@returns(200)

@endpoint GET /tools/now-local
@returns(200)

@endpoint POST /tools/reconstruct
@optional {ReconstructFiles: bool}
@returns(200)

@endpoint POST /tools/reset
@returns(200)

@endpoint POST /tools/shutdown
@returns(200)

@endpoint GET /tools/unknown-sop-class-accepted
@returns(200)

@endpoint PUT /tools/unknown-sop-class-accepted
@returns(200)

@endgroup

@end
