# HG changeset patch # User Sebastien Jodogne # Date 1566196548 -7200 # Node ID 0a97b61ae02105e1e773b9efd53ba7b76f5fbfca # Parent a9e34dc2635b31d247aa8f685af2b9ff34c31ad7 updated openapi based on Chris McGee message on 2019-08-18 diff -r a9e34dc2635b -r 0a97b61ae021 OpenAPI/orthanc-openapi.yaml --- a/OpenAPI/orthanc-openapi.yaml Fri Aug 16 15:28:16 2019 +0200 +++ b/OpenAPI/orthanc-openapi.yaml Mon Aug 19 08:35:48 2019 +0200 @@ -6,6 +6,203 @@ One of the major strengths of Orthanc lies in its built-in RESTful API, that can be used to drive Orthanc from external applications, independently of the programming language that is used to develop these applications. The REST API of Orthanc gives a full programmatic access to all the core features of Orthanc. Importantly, Orthanc Explorer (the embedded administrative interface of Orthanc) entirely resorts to this REST API for all its features. This implies that anything that can be done through Orthanc Explorer, can also be done through REST queries. servers: - url: 'https://demo.orthanc-server.com' +components: + schemas: + patient: + properties: + ID: + type: string + Studies: + type: array + items: + type: string + MainDicomTags: + type: object + properties: + OtherPatientIDs: + type: string + PatientBirthDate: + type: string + PatientName: + type: string + PatientSex: + type: string + ParentPatient: + type: string + Type: + type: string + enum: + - Patient + example: { + "ID" : "07a6ec1c-1be5920b-18ef5358-d24441f3-10e926ea", + "MainDicomTags" : { + "OtherPatientIDs" : "(null)", + "PatientBirthDate" : "0", + "PatientID" : "000000185", + "PatientName" : "Anonymous^Unknown", + "PatientSex" : "O" + }, + "Studies" : [ "9ad2b0da-a406c43c-6e0df76d-1204b86f-78d12c15" ], + "Type" : "Patient" +} + study: + properties: + ID: + type: string + Series: + type: array + items: + type: string + MainDicomTags: + type: object + properties: + AccesionNumber: + type: string + StudyDate: + type: string + StudyDescription: + type: string + StudyID: + type: string + StudyInstanceUID: + type: string + StudyTime: + type: string + ParentPatient: + type: string + Type: + type: string + enum: + - Study + example: { + "ID" : "9ad2b0da-a406c43c-6e0df76d-1204b86f-78d12c15", + "MainDicomTags" : { + "AccessionNumber" : "(null)", + "StudyDate" : "20120716", + "StudyDescription" : "TestSUVce-TF", + "StudyID" : "23848", + "StudyInstanceUID" : "1.2.840.113704.1.111.7016.1342451220.40", + "StudyTime" : "170728" + }, + "ParentPatient" : "07a6ec1c-1be5920b-18ef5358-d24441f3-10e926ea", + "Series" : [ + "6821d761-31fb55a9-031ebecb-ba7f9aae-ffe4ddc0", + "2cc6336f-2d4ae733-537b3ca3-e98184b1-ba494b35", + "7384c47e-6398f2a8-901846ef-da1e2e0b-6c50d598" + ], + "Type" : "Study" +} + series: + properties: + ID: + type: string + ExpectedNumberOfInstances: + type: number + Instances: + type: array + items: + type: string + MainDicomTags: + type: object + properties: + Manufacturer: + type: string + Modality: + type: string + NumberOfSlices: + type: string + ProtocolName: + type: string + SeriesDate: + type: string + SeriesDescription: + type: string + SeriesInstanceUID: + type: string + SeriesNumber: + type: string + SeriesTime: + type: string + StationName: + type: string + ParentStudy: + type: string + Type: + type: string + enum: + - Series + Status: + type: string + enum: + - Complete + example: { + "ExpectedNumberOfInstances" : 45, + "ID" : "2cc6336f-2d4ae733-537b3ca3-e98184b1-ba494b35", + "Instances" : [ + "41bc3f74-360f9d10-6ae9ffa4-01ea2045-cbd457dd", + "1d3de868-6c4f0494-709fd140-7ccc4c94-a6daa3a8", + "1010f80b-161b71c0-897ec01b-c85cd206-e669a3ea", + "e668dcbf-8829a100-c0bd203b-41e404d9-c533f3d4" + ], + "MainDicomTags" : { + "Manufacturer" : "Philips Medical Systems", + "Modality" : "PT", + "NumberOfSlices" : "45", + "ProtocolName" : "CHU/Body_PET/CT___50", + "SeriesDate" : "20120716", + "SeriesDescription" : "[WB_CTAC] Body", + "SeriesInstanceUID" : "1.3.46.670589.28.2.12.30.26407.37145.2.2516.0.1342458737", + "SeriesNumber" : "587370", + "SeriesTime" : "171121", + "StationName" : "r054-svr" + }, + "ParentStudy" : "9ad2b0da-a406c43c-6e0df76d-1204b86f-78d12c15", + "Status" : "Complete", + "Type" : "Series" +} + instance: + properties: + FileSize: + type: number + FileUuid: + type: string + ID: + type: string + IndexInSeries: + type: number + MainDicomTags: + type: object + properties: + AcquisitionNumber: + type: string + ImageIndex: + type: string + ImagePositionPatient: + type: string + InstanceNumber: + type: string + SOPInstanceUID: + type: string + ParentSeries: + type: string + Type: + enum: + - Instance + example: { + "FileSize" : 35440, + "FileUuid" : "7976ad32-4d15-439b-8789-bf70f52200ec", + "ID" : "055bfbaf-2aae936c-82ed5a9a-9267f8b7-416a4000", + "IndexInSeries" : 59, + "MainDicomTags" : { + "AcquisitionNumber" : "2", + "ImageIndex" : "59", + "ImagePositionPatient" : "-134.74816\\-272.14441\\-712.764", + "InstanceNumber" : "59", + "SOPInstanceUID" : "1.3.12.2.1107.5.1.4.36085.2.0.3752288429331748" + }, + "ParentSeries" : "318603c5-03e8cffc-a82b6ee1-3ccd3c1e-18d7e3bb", + "Type" : "Instance" +} paths: /instances: post: @@ -36,6 +233,17 @@ get: tags: [Instances] description: Get all DICOM instances ID's in Orthanc + parameters: + - name: limit + in: query + schema: + type: number + description: Limit the number of results to the specified. number + - name: since + in: query + schema: + type: number + description: Show only the resources since the index provided. responses: 200: description: Array of all instances ID's @@ -65,48 +273,7 @@ content: application/json: schema: - properties: - FileSize: - type: number - FileUuid: - type: string - ID: - type: string - IndexInSeries: - type: number - MainDicomTags: - type: object - properties: - AcquisitionNumber: - type: string - ImageIndex: - type: string - ImagePositionPatient: - type: string - InstanceNumber: - type: string - SOPInstanceUID: - type: string - ParentSeries: - type: string - Type: - enum: - - Instance - example: { - "FileSize" : 35440, - "FileUuid" : "7976ad32-4d15-439b-8789-bf70f52200ec", - "ID" : "055bfbaf-2aae936c-82ed5a9a-9267f8b7-416a4000", - "IndexInSeries" : 59, - "MainDicomTags" : { - "AcquisitionNumber" : "2", - "ImageIndex" : "59", - "ImagePositionPatient" : "-134.74816\\-272.14441\\-712.764", - "InstanceNumber" : "59", - "SOPInstanceUID" : "1.3.12.2.1107.5.1.4.36085.2.0.3752288429331748" - }, - "ParentSeries" : "318603c5-03e8cffc-a82b6ee1-3ccd3c1e-18d7e3bb", - "Type" : "Instance" -} + $ref: "#/components/schemas/instance" delete: tags : [Instances] description: Delete an instance @@ -180,6 +347,18 @@ in: path schema: type: string + - name: simplify + required: false + description: Show more user-friendly tags like in /simplified-tags + in: query + schema: + type: boolean + - name: short + required: false + description: Shorten the values so that they are not separate JSON objects with the user-friendly description of the tag and the type. Instead, values are given as direct values to the tags. + in: query + schema: + type: boolean responses: 200: description: DICOM tags and values @@ -225,6 +404,72 @@ "Value" : "20040304" } } + /instances/{Id}/header: + get: + tags: [Instances] + description: Get the detailed header tags for the DICOM instance. + parameters: + - name: Id + required: true + in: path + schema: + type: string + - name: simplify + required: false + description: Show more user-friendly tags like in /simplified-tags + in: query + schema: + type: boolean + - name: short + required: false + description: Shorten the values so that they are not separate JSON objects with the user-friendly description of the tag and the type. Instead, values are given as direct values to the tags. + in: query + schema: + type: boolean + responses: + 200: + description: DICOM tags and values + content: + application/json: + schema: + type: object + example: { + "0002,0000" : { + "Name" : "FileMetaInformationGroupLength", + "Type" : "String", + "Value" : "222" + }, + "0002,0002" : { + "Name" : "MediaStorageSOPClassUID", + "Type" : "String", + "Value" : "1.2.840.10008.5.1.4.1.1.128" + }, + "0002,0003" : { + "Name" : "MediaStorageSOPInstanceUID", + "Type" : "String", + "Value" : "1.3.12.2.1107.5.1.4.36085.2.0.3752288429331748" + }, + "0002,0010" : { + "Name" : "TransferSyntaxUID", + "Type" : "String", + "Value" : "1.2.840.10008.1.2.1" + }, + "0002,0012" : { + "Name" : "ImplementationClassUID", + "Type" : "String", + "Value" : "1.2.826.0.1.3680043.2.1143.107.104.103.115.2.2.4" + }, + "0002,0013" : { + "Name" : "ImplementationVersionName", + "Type" : "String", + "Value" : "GDCM 2.2.4" + }, + "0002,0016" : { + "Name" : "SourceApplicationEntityTitle", + "Type" : "String", + "Value" : "gdcmconv" + } +} /instances/{Id}/content/{Tag}: get: tags: [Instances] @@ -292,7 +537,7 @@ /instances/{Id}/{PixelFormat}: get: tags: [Instances] - description: Download a preview image of the DICOM instance. + description: Download an image of the DICOM instance in the specified format. parameters: - name: Id required: true @@ -308,6 +553,9 @@ - image-uint8 - image-uint16 - image-int16 + - matlab + - raw + - raw.gz - name: Accept required: true in: header @@ -319,11 +567,13 @@ - image/x-portable-arbitrarymap responses: 200: - description: DICOM preview + description: Image content: image/png: {} image/jpg: {} image/x-portable-arbitrarymap: {} + application/octet-stream: {} + text/plain: {} /instances/{Id}/pdf: get: tags: [Instances] @@ -345,6 +595,17 @@ get: tags: [Series] description: Get all DICOM series ID's in Orthanc + parameters: + - name: limit + in: query + schema: + type: number + description: Limit the number of results to the specified. number + - name: since + in: query + schema: + type: number + description: Show only the resources since the index provided. responses: 200: description: Array of all series ID's @@ -374,73 +635,7 @@ content: application/json: schema: - properties: - ID: - type: string - ExpectedNumberOfInstances: - type: number - Instances: - type: array - items: - type: string - MainDicomTags: - type: object - properties: - Manufacturer: - type: string - Modality: - type: string - NumberOfSlices: - type: string - ProtocolName: - type: string - SeriesDate: - type: string - SeriesDescription: - type: string - SeriesInstanceUID: - type: string - SeriesNumber: - type: string - SeriesTime: - type: string - StationName: - type: string - ParentStudy: - type: string - Type: - type: string - enum: - - Series - Status: - type: string - enum: - - Complete - example: { - "ExpectedNumberOfInstances" : 45, - "ID" : "2cc6336f-2d4ae733-537b3ca3-e98184b1-ba494b35", - "Instances" : [ - "41bc3f74-360f9d10-6ae9ffa4-01ea2045-cbd457dd", - "1d3de868-6c4f0494-709fd140-7ccc4c94-a6daa3a8", - "1010f80b-161b71c0-897ec01b-c85cd206-e669a3ea", - "e668dcbf-8829a100-c0bd203b-41e404d9-c533f3d4" - ], - "MainDicomTags" : { - "Manufacturer" : "Philips Medical Systems", - "Modality" : "PT", - "NumberOfSlices" : "45", - "ProtocolName" : "CHU/Body_PET/CT___50", - "SeriesDate" : "20120716", - "SeriesDescription" : "[WB_CTAC] Body", - "SeriesInstanceUID" : "1.3.46.670589.28.2.12.30.26407.37145.2.2516.0.1342458737", - "SeriesNumber" : "587370", - "SeriesTime" : "171121", - "StationName" : "r054-svr" - }, - "ParentStudy" : "9ad2b0da-a406c43c-6e0df76d-1204b86f-78d12c15", - "Status" : "Complete", - "Type" : "Series" -} + $ref: "#/components/schemas/series" delete: tags : [Series] description: Delete a series @@ -453,10 +648,41 @@ responses: 200: description: Success + /series/{Id}/instances: + get: + tags: [Series] + description: Get the instances for a series + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Orthanc instances + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/instance" + /studies: get: tags: [Studies] description: Get all DICOM studies ID's in Orthanc + parameters: + - name: limit + in: query + schema: + type: number + description: Limit the number of results to the specified. number + - name: since + in: query + schema: + type: number + description: Show only the resources since the index provided. responses: 200: description: Array of all study ID's @@ -486,52 +712,7 @@ content: application/json: schema: - properties: - ID: - type: string - Series: - type: array - items: - type: string - MainDicomTags: - type: object - properties: - AccesionNumber: - type: string - StudyDate: - type: string - StudyDescription: - type: string - StudyID: - type: string - StudyInstanceUID: - type: string - StudyTime: - type: string - ParentPatient: - type: string - Type: - type: string - enum: - - Study - example: { - "ID" : "9ad2b0da-a406c43c-6e0df76d-1204b86f-78d12c15", - "MainDicomTags" : { - "AccessionNumber" : "(null)", - "StudyDate" : "20120716", - "StudyDescription" : "TestSUVce-TF", - "StudyID" : "23848", - "StudyInstanceUID" : "1.2.840.113704.1.111.7016.1342451220.40", - "StudyTime" : "170728" - }, - "ParentPatient" : "07a6ec1c-1be5920b-18ef5358-d24441f3-10e926ea", - "Series" : [ - "6821d761-31fb55a9-031ebecb-ba7f9aae-ffe4ddc0", - "2cc6336f-2d4ae733-537b3ca3-e98184b1-ba494b35", - "7384c47e-6398f2a8-901846ef-da1e2e0b-6c50d598" - ], - "Type" : "Study" -} + $ref: "#/components/schemas/study" delete: tags : [Studies] description: Delete a study @@ -544,10 +725,60 @@ responses: 200: description: Success + /studies/{Id}/series: + get: + tags: [Studies] + description: Get the series for a study + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Orthanc series + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/series" + /studies/{Id}/instances: + get: + tags: [Studies] + description: Get the instances for a study + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Orthanc instances + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/instance" + /patients: get: tags: [Patients] description: Get all DICOM patient ID's in Orthanc + parameters: + - name: limit + in: query + schema: + type: number + description: Limit the number of results to the specified. number + - name: since + in: query + schema: + type: number + description: Show only the resources since the index provided. responses: 200: description: Array of all patient ID's @@ -577,42 +808,7 @@ content: application/json: schema: - properties: - ID: - type: string - Studies: - type: array - items: - type: string - MainDicomTags: - type: object - properties: - OtherPatientIDs: - type: string - PatientBirthDate: - type: string - PatientName: - type: string - PatientSex: - type: string - ParentPatient: - type: string - Type: - type: string - enum: - - Patient - example: { - "ID" : "07a6ec1c-1be5920b-18ef5358-d24441f3-10e926ea", - "MainDicomTags" : { - "OtherPatientIDs" : "(null)", - "PatientBirthDate" : "0", - "PatientID" : "000000185", - "PatientName" : "Anonymous^Unknown", - "PatientSex" : "O" - }, - "Studies" : [ "9ad2b0da-a406c43c-6e0df76d-1204b86f-78d12c15" ], - "Type" : "Patient" -} + $ref: "#/components/schemas/patient" delete: tags : [Patients] description: Delete a patient @@ -625,6 +821,63 @@ responses: 200: description: Success + /patients/{Id}/studies: + get: + tags: [Patients] + description: Get the studies for a patient + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Success + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/study" + /patients/{Id}/series: + get: + tags: [Patients] + description: Get the series for a patient + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Orthanc series + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/series" + /patients/{Id}/instances: + get: + tags: [Patients] + description: Get the instances for a patient + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Orthanc instances + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/instance" /peers: get: @@ -943,6 +1196,9 @@ - Study - Series - Instance + Expand: + type: boolean + description: Returns an array of resources instead of just ID's. Limit: type: number Query: @@ -960,9 +1216,22 @@ content: application/json: schema: - type: array - items: - type: string + oneOf: + - type: array + items: + type: string + - type: array + items: + $ref: "#/components/schemas/instance" + - type: array + items: + $ref: "#/components/schemas/series" + - type: array + items: + $ref: "#/components/schemas/study" + - type: array + items: + $ref: "#/components/schemas/patient" example: [ "6821d761-31fb55a9-031ebecb-ba7f9aae-ffe4ddc0", "2cc6336f-2d4ae733-537b3ca3-e98184b1-ba494b35" ] /changes: get: @@ -1601,6 +1870,200 @@ responses: 200: description: Success + + /instances/{Id}/frames: + get: + tags: [Frames] + description: Get the list of frames for a DICOM instance. + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Success + content: + application/json: + schema: + type: array + items: + type: number + example: [0, 75] + /instances/{Id}/frames/{Idx}/{PixelFormat}: + get: + tags: [Frames] + description: Get the image data of a frame within an instance. + parameters: + - name: Id + required: true + in: path + schema: + type: string + - name: Idx + required: true + in: path + schema: + type: number + - name: PixelFormat + required: true + in: path + schema: + type: string + enum: + - image-uint8 + - image-uint16 + - image-int16 + - matlab + - raw + - raw.gz + - name: Accept + required: true + in: header + schema: + type: string + enum: + - image/png + - image/jpeg + - image/x-portable-arbitrarymap + responses: + 200: + description: Image + content: + image/png: {} + image/jpg: {} + image/x-portable-arbitrarymap: {} + application/octet-stream: {} + text/plain: {} + /instances/{Id}/frames/{Idx}/preview: + get: + tags: [Frames] + description: Download a preview image of the frame of a DICOM instance. + parameters: + - name: Id + required: true + in: path + schema: + type: string + - name: Idx + required: true + in: path + schema: + type: number + - name: Accept + description: Default is image/png + required: false + in: header + schema: + type: string + enum: + - image/png + - image/jpeg + responses: + 200: + description: DICOM preview + content: + image/png: {} + image/jpg: {} + + /tools/lookup: + post: + tags: [Lookup] + description: Lookup resources by their UID + requestBody: + content: + text/plain: + example: "1.2.826.0.1.3680043.8.1055.1.20111103111148288.81713267.86905863" + responses: + 200: + description: Success + content: + application/json: + schema: + type: array + items: + properties: + ID: + type: string + Path: + type: string + Type: + type: string + enum: + - Patient + - Study + - Series + - Instance + example: { + "ID" : "53a15d3a-ec236c65-5958be97-e31b8725-5f55ca69", + "Path" : "/instances/53a15d3a-ec236c65-5958be97-e31b8725-5f55ca69", + "Type" : "Instance" + } + + /tools/create-archive: + post: + tags: [Archive] + description: Create an archive (zip) of the specified resource ID's as a collection of DICOM files. + requestBody: + content: + application/json: + schema: + oneOf: + - type: array + items: + type: string + - properties: + Synchronous: + type: boolean + default: true + description: If synchronous is set to false then the archive is created through a job. The job ID and path will be given in the response. Once that job is complete then you can access the archive from the /jobs/{Id}/archive endpoint. + Resources: + type: array + items: + type: string + example: [ + 'ca29faea-b6a0e17f-067743a1-8b778011-a48b2a17', + '0a9b3153-2512774b-2d9580de-1fc3dcf6-3bd83918', + '1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0' + ] + responses: + 200: + description: Success + content: + application/zip: {} + application/json: + schema: + properties: + ID: + type: string + Path: + type: string + example: { + "ID" : "6c5bab22-79ae-4eca-b0af-d979431801bd", + "Path" : "/jobs/6c5bab22-79ae-4eca-b0af-d979431801bd" +} + + /tools/default-encoding: + get: + tags: [I18N] + description: Get the default text encoding for the Orthanc server. + responses: + 200: + description: Success + content: + text/plain: + example: Latin1 + post: + tags: [I18N] + description: Set the default text encoding for the Orthanc server. + requestBody: + content: + text/plain: + example: "Latin1" + responses: + 200: + description: Success /jobs: get: @@ -1691,6 +2154,21 @@ "Timestamp" : "20190306T095408.556082", "Type" : "Archive" } + /jobs/{Id}/archive: + get: + tags: [Jobs] + description: Get the archive generated by the job. Note that the job must be an archive job and it must be complete. + parameters: + - name: Id + required: true + in: path + schema: + type: string + responses: + 200: + description: Success + content: + application/zip: {} /jobs/{Id}/cancel: post: tags: [Jobs] @@ -1818,3 +2296,100 @@ responses: 200: description: Success + + /system: + get: + tags: [System] + description: Get system information for the Orthanc server. + responses: + 200: + description: Success + content: + application/json: + schema: + properties: + ApiVersion: + type: number + DatabaseBackendPlugin: + type: string + DatabaseVersion: + type: number + DicomAet: + type: string + DicomPort: + type: number + HttpPort: + type: number + Name: + type: string + PluginsEnabled: + type: boolean + StorageAreaPlugin: + type: string + Version: + type: string + example: { + "ApiVersion" : 3, + "DatabaseBackendPlugin" : null, + "DatabaseVersion" : 6, + "DicomAet" : "ORTHANC", + "DicomPort" : 4242, + "HttpPort" : 8042, + "Name" : "Orthanc Demo", + "PluginsEnabled" : true, + "StorageAreaPlugin" : null, + "Version" : "1.5.7" +} + + /statistics: + get: + tags: [Statistics] + description: Get statistics about the data stored in Orthanc. + responses: + 200: + description: Success + content: + application/json: + schema: + properties: + CountInstances: + type: number + CountPatients: + type: number + CountSeries: + type: number + CountStudies: + type: number + TotalDiskSize: + type: string + TotalDiskSizeMB: + type: number + TotalUncompressedSize: + type: string + TotalUncompressedSizeMB: + type: number + example: { + "CountInstances" : 2352, + "CountPatients" : 7, + "CountSeries" : 23, + "CountStudies" : 7, + "TotalDiskSize" : "913213057", + "TotalDiskSizeMB" : 870, + "TotalUncompressedSize" : "913213057", + "TotalUncompressedSizeMB" : 870 +} + + /tools/execute-script: + post: + tags: [Lua] + description: Execute the posted Lua script + requestBody: + content: + text/plain: + example: print(42) + responses: + 200: + description: Script executed + content: + text/plain: + example: "42" \ No newline at end of file