The XML4Pharma Application Server

XML4Pharma CDISC Controlled Terminology Web Services

Important: February 2019: these web services have been updated to cover SDTM, SEND, ADaM, CDASH (and: older: COA and CRS) models.
This is thanks to the use of a new Native XML database in which all published CDISC-CT has been stored "as is".

The old CDISC-CT RESTful web services are described and can be found here

NEW (April 2022): Implementation of all new and updated CDISC codetable mappings.

Following versions of the CDISC-CT are supported:

  • 2024-03-29
  • 2023-12-15
  • 2023-09-29
  • 2023-06-30
  • 2023-03-31
  • 2022-12-16
  • 2022-09-30
  • 2022-06-24
  • 2022-03-25
  • 2021-12-17
  • 2021-09-24
  • 2021-06-25
  • 2021-03-26
  • 2020-12-18
  • 2020-11-06 - Replacement of version 2020-09-25
  • 2020-09-25 - RETREATED DUE TO: CDISC bug
  • 2020-06-26
  • 2020-05-08 - COVID-19 Interim: only SDTM, SEND and CDASH
  • 2020-03-27
  • 2019-12-20
  • 2019-09-27
  • 2019-06-28
  • 2019-03-29
  • 2018-12-21
  • 2018-09-28
  • 2018-06-29
  • 2018-03-30
  • 2017-12-22
  • 2017-09-29
  • 2017-06-30
  • 2017-03-31
  • 2016-12-16
  • 2016-09-30 - WARNING: see CDISC bug warning 1
  • 2016-06-24
  • 2016-03-25
  • 2015-12-18
  • 2015-09-25
  • 2015-06-26
  • 2015-03-27
  • 2014-12-19
  • 2014-10-06 - WARNING: This version did not contain COA/QS/QRS-FT
  • 2014-09-26
  • 2014-06-27
  • 2014-03-28
  • Controlled Terminology for following CDISC models (parameter {model}) are supported:

    Where appropriate, the CodeList version can be provided by the path parameter {codelistversion}, which is a date. Examples are given below.
    When no version is provided, the latest version (currently '2022-12-16') is taken.
    If you would like to use the latest codelist version, the better practice is however that you query for it (resource "LatestCodeListVersion") and use the response in the next query.

    For a number of the services, the codelist version (a date), can be replaced by the keyword "history". These services are marked with a "(*)". When "history" is provided, the response is provided for each of the available codelist versions. For example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromNCICode/SDTM/C64818/history

    The common base for all these CDISC-CT web services is: http://xml4pharmaserver.com:8080/CDISCCTService2/rest/

    The following RESTful web services have been developed:

  • Get the latest CDISC-CT version identifier for the given model
  • Get all the (supported) codelist versions for the given model
  • Get whether a specific codelist version for the given model is supported (or is a valid version)
  • Get whether a CDISC-CT Codelist for the given model is extensible or not
  • Get the CodeList NCI code for a given CDISC-CT Codelist and model by CodeList Name
  • Get all valid codes for a given CDISC-CT Codelist and model by CodeList Name
  • Get all valid codes for a given CDISC-CT Codelist and model by CodeList NCI code
  • Get CDISC test name (--TEST) from CDISC test code (--TESTCD) and the given model
  • Get NCI code from CDISC test code (--TESTCD) and given model
  • Get CDISC Definition from CDISC test code (--TESTCD) and given model
  • Get whether a coded value is a valid value for the given codelist for the given model
  • Get whether a coded value is a valid value for the given codelist by CodeList NCI Code and CodeList version for the given model
  • Get the decoded value from a coded value in a specific CodeList and CodeList version and the given model
  • Get the CDISC Term from the NCI code and the given model
  • Get CDISC Preferred Term from NCI code and the given model
  • Get CDISC Definition from NCI code and model
  • Get UCUM notation of CDISC unit
  • Get whether a CDISC unit is a correct CDISC unit in the given model
  • Get the CDISC submission value from a CDISC synonym in the given model
  • Get all synonyms for a given CDISC submission value and model
  • Get all synonyms for a given CDISC submission value NCI code and given model

  • Get the latest CDISC-CT version identifier for the given model (SDTM, SEND, ADaM, CDASH, CRS, COA)
  • This will return a string (currently a date), embedded in XML or JSON or just as text, according to your request.
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/LatestCodeListVersion/{model}
    For example, to get the latest CDISC-CT version for the SDTM standard, use:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/LatestCodeListVersion/SDTM
    For example, to get the latest CDISC-CT version for the ADaM standard, use:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/LatestCodeListVersion/ADaM

    This resource is very useful for "chaining", i.e. your query requires a codelist version, and you would like your application to automatically get the latest one. In this case you use the output of this resource as a part of the input of your next query.


  • Get all the (supported) codelist versions for the given model
  • This will return a list of all the codelist versions that have been implemented for the given model, embedded in XML or JSON or just as text, according to your request.
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListVersions/{model}

    For example, if you want to obtain all the published CDISC-CT versions for the ADaM model, you will use:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListVersions/ADaM

    This resource is very useful for "chaining" and for "iteration", it will e.g. allow you have your software iterate over all versions, and find out what the differences are.
    For example, you will then find out that CDISC changes definitions of terms between versions!


  • Get whether a specific codelist version supported (or is a valid version) for the given model
  • This will return a string ("true" or "false"), embedded in XML or JSON or just as text, according to your request.
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCodeListVersion/{model}/{codelistversion}
    Examples:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCodeListVersion/SDTM/2016-12-16
    will return "true",
    whereas: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCodeListVersion/SDTM/2016-12-15
    will return "false".

    Remark that currently (latest version '2022-12-16') all "supported" versions are independent of the standard used (SDTM, SEND, ADaM, CDASH). If this changes in future, we will add a web service where you can query for the supported version of CDISC-CT for a specific standard.


  • Get whether a CDISC-CT Codelist is extensible or not for the given model
  • When the name of a codelist or its NCI code is submitted together with the codelist version and the model, the string "true" is returned when the codelist is extensible. When the codelist is not extensible, the string "false" is returned. In case the combination of codelist version and name or NCI code cannot be found, the string "Invalid CodeList" is returned.
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListName/{model}/{codelistname}/{codelistversion} (*)
    and: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListNCICode/{model}/{codelistncicode}/{codelistversion} (*)

    Examples:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListName/SDTM/LBTESTCD/2015-06-26
    will return "true",
    whereas: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListName/SDTM/ACN/2015-12-18
    will return "false".

    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListNCICode/SDTM/C65047/2014-12-19
    will return "true"
    whereas: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListNCICode/SDTM/C66767/2016-03-25
    will return "false"
    CDASH example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListName/CDASH/EGORRESU/2016-03-25
    SEND example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListName/SEND/EGTESTCD/2016-03-25

    This resource requires you to give the version of the CDISC-CT (or the keyword "history"), as some codelists were extensible in the past and are not anymore in the latest version, and vice versa.
    If you just want to know whether the latest version of your codelist is extensible, let your application use the resource "LatestCodeListVersion" and use the response of it as input in the current request.

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListExtensibleCodeListName/SDTM/ACN/history


  • Get the Codelist NCI code for a given CDISC-CT CodeList and mode by CodeList Name
  • The name of the codelist (e.g. "FREQ") needs to be provided. If no codelist version is provided, the latest version (currently '2022-12-16') is taken.


    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListNCICodeFromCodeListName/{model}/{codelistname}
    and: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListNCICodeFromCodeListName/{model}{codelistname}/{codelistversion} (*)

    Examples:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListNCICodeFromCodeListName/SDTM/LAT/2014-03-28
    will return "C99073",
    whereas: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SDTM/CodeListNCICodeFromCodeListName/DIR
    will return "C99074"
    SEND example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodeListNCICodeFromCodeListName/SEND/FXRESCAT
    will return the value "C124313".


  • Get all valid codes for a given CDISC-CT Codelist and model by CodeList Name
  • The name of the codelist (e.g. "FREQ") needs to be provided. If no codelist version is provided, the latest version (currently '2022-12-16') is taken.


    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListName/{model}/{codelistname}
    and: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListName/{model}{codelistname}/{codelistversion} (*)

    Examples:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListName/SDTM/LAT/2014-03-28
    will return 7 allowed values, from 'BILATERAL' to 'UNILATERAL',
    whereas: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SDTM/CodedValuesFromCodeListName/DIR
    will return 42 allowed values from the latest codelist version (currently '2022-12-16'), from 'TEMPORAL' to 'VENTROLATERAL'.
    SEND example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListName/SEND/FXRESCAT
    will return the values "MALFORMATION", "OSSIFICATION", "UNCLASSIFIED" and "VARIATION"

    You can also use this service to look up the allowed values for trial summary parameters. For example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListName/SDTM/TTYPE
    will return all allowed values for the trial summary parameter "Trial Type" (TSPARMCD=TTYPE) in the SDTM model

    Example with "history" (nicely demonstrating the growth of this codelist over time:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListName/SDTM/TTYPE/history


  • Get all valid codes for a given CDISC-CT Codelist and model by CodeList NCI code
  • The NCI code of the codelist (e.g. "C71113") needs to be provided. If no codelist version is provided, the latest version (currently '2022-12-16' in the case of SDTM) is taken.


    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListNCICode/{model}/{codelistncicode}
    and: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListNCICode/{model}/{codelistncicode}/{codelistversion} (*)

    Examples:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListNCICode/SDTM/C99073/2014-03-28
    will return 7 allowed values, from 'BILATERAL' to 'UNILATERAL',
    whereas: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListNCICode/SDTM/C99074
    will return 53 allowed values from the latest codelist version (currently '2022-12-16'), from 'ANTERIOR' to 'VOLAR'.

    Exmple with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CodedValuesFromCodeListNCICode/SDTM/C99074/history


  • Get CDISC test name (--TEST) from CDISC test code (--TESTCD) and the given model
  • When a CDISC test code (e.g. "SYSBP") is submitted together with the codelist name (e.g. "LBTESTCD") and model (usually "SDTM" or "SEND") the CDISC test name is returned. It is important that the codelist name is also provided, as the test code is context dependent. For example "ALB" is both "Albumin" (LBTESTCD) as "Albania" (COUNTRY). In the example case the response is: "Albumin"
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/{model}/{testcd}/{codelist}
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/{model}/{testcd}/{codelist}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/SDTM/ALB/LBTESTCD
    Or (for an earlier version of CDISC-CT): http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/SDTM/ALB/LBTESTCD/2014-03-28

    You can also query for Trial Summary Parameter names given the parameter code for the SDTM model
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/SDTM/TBLIND/TSPARMCD OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/SDTM/TBLIND/TSPARMCD/2014-03-28
    Returning: 'Trial Blinding Schema'
    A similar SEND example is:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/SEND/ALTSTDID/STSPRMCD
    Returning: "Alternate Study ID"

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/TestNameFromTestCode/SDTM/TBLIND/TSPARMCD/history


  • Get NCI code from CDISC test code (--TESTCD) and given model
  • When a CDISC test code (e.g. "SYSBP") is submitted together with the codelist name (e.g. "LBTESTCD") the NCI code is returned. It is important that the codelist name is also provided, as the test code is context dependent. For more information about NCI codes for CDISC controlled terminology see:
    http://www.cancer.gov/cancertopics/cancerlibrary/terminologyresources/cdisc
    In the example case the response is: "C64431"
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/NCICodeFromTestCode/{model}{testcd}/{codelist}
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/NCICodeFromTestCode/{model}{testcd}/{codelist}/{codelistversion} (*)
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/NCICodeFromTestCode/SDTM/ALB/LBTESTCD

    You can also do the same for a Trial Summary Parameter.
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/NCICodeFromTestCode/SDTM/TBLIND/TSPARMCD/2015-06-26
    Returning: 'C49658'

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/NCICodeFromTestCode/SDTM/TBLIND/TSPARMCD/history


  • Get CDISC Definition from CDISC test code (--TESTCD) and the given model
  • When a CDISC test code (e.g. "SYSBP") is submitted together with the codelist name (e.g. "LBTESTCD") the CDISC definition is returned. It is important that the codelist name is also provided, as the test code is context dependent.
    In the example case the response is: "A measurement of the albumin protein in a biological specimen".
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromCDISCTestCode/{model}/{testcd}/{codelist}
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromCDISCTestCode/{model}/{testcd}/{codelist}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromCDISCTestCode/SDTM/ALB/LBTESTCD

    And similar for a Trial Summary parameter.
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromCDISCTestCode/SDTM/TBLIND/TSPARMCD
    Returning: 'The name of a code list that contains terms to define the type of blinding for the trial. (NCI)'

    Example with "history", demonstrating how the definition of "TBLIND" changed over time (!):
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromCDISCTestCode/SDTM/TBLIND/TSPARMCD/history


  • Get whether a coded value is a valid value for the given codelist for the given model
  • URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeList/{model}{codedvalue}/{codelist}
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeList/{model}{codedvalue}/{codelist}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeList/SDTM/COMPLETED/NCOMPLT
    returns the string "true"
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeList/SDTM/INCOMPLETED/NCOMPLT
    returns the string "false"

    The coded value itself may contain blanks, that is no problem, e.g.:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueCodeList/SDTM/ADVERSE EVENT/NCOMPLT/2015-09-25

    Example with "history" (where "Leukocyte Cell Differential" is new as of version 2019-06-28):
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeList/SDTM/Leukocyte Cell Differential/LBTEST/history

    IMPORTANT REMARK: Do NOT use this service to validate terms from the CDISC "UNIT" codelist, use the method "Get whether a CDISC unit is a correct CDISC unit" instead. Reason: some units contain a forward slash, which may be misinterpreted by the RESTful web service


  • Get whether a coded value is a valid value for the given codelist by CodeList NCI Code and CodeList version for the given model
  • URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeList/{model}/{codedvalue}/{codelistncicode}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeListNCICode/SDTM/MULTIPLE/C74457/2016-03-25
    returns the string "false"
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeListNCICode/SDTM/WHITE/C74457/2016-03-25
    returns the string "true"

    Example with "history" (where "Leukocyte Cell Differential" is new as of version 2019-06-28):
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeListNCICode/SDTM/Leukocyte Cell Differential/C67154/history

    Example for SEND: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidValueInCodeListNCICode/SEND/DENTAL%20EXAM/C158118/history


  • Get the decoded value from a coded value in a specific CodeList and CodeList version for the given model
  • URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/{model}/{codedvalue}/{codelistname}
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/{model}/{codedvalue}/{codelistname}/{codelistversion} (*)
    Examples:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/SDTM/M/SEX/2016-06-24
    returns the value "Male"
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/SDTM/Y/NY
    returns the value "Yes"

    It is important that the name of the codelist is given, as a coded value may have different decodes depending on the codelist. For example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/SDTM/ALB/COUNTRY/2016-06-24
    will return "Albania",
    whereas:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/SDTM/ALB/LBTESTCD
    returns the value "Albumin"

    SEND example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/SEND/NEUTHYGR/LBTESTCD
    returns the value "Hypogranular Neutrophils"

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCCodeListValueDecode/SEND/NEUTHYGR/LBTESTCD/history

  • Get the CDISC Terms from the NCI code and model
  • When an NCI code (e.g. "C64431" for SDTM) is submitted the submission) term or terms are returned.
    In the example case the response contains: "ALB" and "Albumin".
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/{model}/{ncicode}
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/{model}/{ncicode}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/SDTM/C64431
    OR e.g.: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/SDTM/C64431/2016-03-25
    Example specific for SEND: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/SEND/C158324

    You can also do so for a trial summary parameter value.
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/SDTM/C15228
    OR e.g.: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/SDTM/15228/2015-03-27
    Returning: 'DOUBLE BLIND'

    IMPORTANT REMARK: slight change as of 2017-04-16: The structure of the response was slightly changed. The returned terms are now packed within an "CDISCTerm" element.
    The reason is that in some cases, the same NCI code stands for two terms, i.e. once the "coded term" (such as "ALB") and once the "decoded term" (such as "Albumin").
    Although we understand the reasoning behind this, we consider this as major CDISC-CT design error. The NCI code is essentially the key, and a key should never have different values. Essentially, the "decoded term" is nothing else than the English representation of the "coded term". However, there can and will be representations in other languages too. However, the CDISC-CT team considers the "coded value" and the "decoded value" (i.e. the English representation) as being equal, thereby ignoring that there are other languages in the world than English. This enormously hinders the use of the system. At least, the "decoded term" should have a "language attribute", stating that e.g. "Albumin" is the English term for the code "ALB".

    ADaM example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/ADaM/C139176
    Returning "EXTRAP"

    Example with "history" (demonstrating a term/code that was completely removed as of 2019-06-28):
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCTermsFromNCICode/SDTM/C74629/history

  • Get CDISC Preferred Term from NCI code and the given model
  • When an NCI code (e.g. "C64431") is submitted with the model, the CDISC preferred term is returned.
    In the example case the response is: "Albumin Measurement" (remark that this is not the submission value).
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCPreferredTermFromNCICode/{model}/{ncicode}
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCPreferredTermFromNCICode//{model}{ncicode}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCPreferredTermFromNCICode/SDTM/C64431

    You can also do so for a trial summary parameter value.
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCPreferredTermFromNCICode/SDTM/C15228
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCPreferredTermFromNCICode/SDTM/C15228/2015-03-27
    Returning: 'Double Blind Study'

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCPreferredTermFromNCICode/SDTM/C64431/history


  • Get CDISC Definition from NCI code and given model
  • When an NCI code (e.g. "C64431") is submitted the CDISC definition is returned.
    In the example case the response is: "A measurement of the albumin protein in a biological specimen".
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromNCICode/{model}/{ncicode}
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromNCICode/{model}/{ncicode}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromNCICode/SDTM/C64431

    You can also do so for a trial summary parameter value.
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromNCICode/SDTM/C15228
    Returning: 'A study in which neither the subject nor the investigator nor the research team interacting with the subject or data during the trial knows what treatment a subject is receiving. (CDISC glossary)'

    ADaM example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromNCICode/ADaM/C81205
    Returning: 'Penultimate Observation Carried Forward: A data imputation technique which populates missing values with the subject's next-to-last nonmissing value.'

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCDefinitionFromNCICode/ADaM/C81205/history


  • Get UCUM notation of CDISC unit
  • When a CDISC unit (e.g. "mmHg") is submitted the corresponding universal UCUM notation is returned.
    In the example case the response is: "mm[Hg]".
    If "IN" (inches) is submitted, "[in_i]" is returned.
    This service has been established as the whole world (including the EHR world) is using UCUM notation for units, but CDISC decided to reinvent the wheel.
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/UCUMFromCDISCUnit/{cdiscunit}
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/UCUMFromCDISCUnit/mmHg
    No fear if the CDISC unit contains a slash "/" itself. For example if you submit "BEATS/MIN" using:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/UCUMFromCDISCUnit/BEATS/MIN
    the correct result "{beats}/min" will be obtained.

    For more information about the UCUM notation and its specification, see: http://www.unitsofmeasure.org

    For more information about why CDISC should move to UCUM, see e.g.


    A presentation given at the CDISC German-speaking User Group Meeting 2013 can be found here.


  • Get whether a CDISC unit is a correct CDISC unit in the given model
  • When a CDISC unit (e.g. "mmHg") is submitted the string "true" (valid) or "false" (invalid) will be returned.
    In the example case the response is: "true".
    If e.g. "mm[Hg]" is submitted, the result is "false", as CDISC does unfortunately not allow
    UCUM notation for units
    The value for "model" will usually be either "SDTM" or "SEND" (ADaM-CT does not define units)
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/{model}/{cdiscunit}
    OR:: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/{model}/{cdiscunit}/{codelistversion} (*)
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/SDTM/mmHg
    No fear if the CDISC unit contains a slash "/" itself. For example if you submit "beats/min" using:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/SDTM/beats/min
    the correct result "true" will be obtained.

    IMPORTANT: as we found out that CDISC units are NOT consistent across versions (i.e. the way of writing the unit sometimes changed between versions), one can now also add the Controlled Terminology Version as an extra parameter.
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/{model}/{cdiscunit}/{codelistversion}
    For example the unit "BEATS/MIN" was replaced by "beats/min" as of version 2015-06-26. So if you (or your system) submits:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/SDTM/BEATS/MIN/2015-03-27
    the result will be "true".
    If you however sumbit http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/SDTM/BEATS/MIN/2015-06-26
    the result will be "false",
    and if you submit:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/SDTM/beats/min/2015-06-2
    the result will be again "true".
    If you do NOT provide a codelist version, the latest version that is available will be used.

    Example with "history" (demonstrating a sudden change in how to write the unit for "heart rate"):
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnit/SDTM/BEATS/MIN/history


  • Get whether a CDISC unit is a correct unit for a given (VS) test code (limited to SDTM)
  • When a CDISC unit (e.g. "mmHg") together with a vital signs test code is submitted the string "true" (valid) or "false" (invalid) will be returned. In case the value for the test code itself is invalid, the string "unrecognized test code" is returned.
    If e.g. "DIABP" together with "kg/m2" is submitted, the string "false" is returned.
    If however "BMI" together with "kg/m2" is submitted, the string "true" is returned.

    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnitForCDISCTestCode/{testcode}/{cdiscunit}
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidCDISCUnitForCDISCTestCode/DIABP/mmHg

    IMPORTANT REMARK: in some cases the "casing" of some CDISC units over time, which makes the later version "out of sync" with the earlier published combination unit/test-code.
    For example, CDISC has published that "BEATS/MIN" is valid value for the test "HR" (heart rate), but the latest versions of the CDISC controlled terminology do not contain "BEATS/MIN" anymore. They contain "beats/min".
    Just ignoring casing is however not a solution for this either...


  • Get whether a Vital signs "position" (VSPOS) is a correct "position" for a given (VS) test code
  • When a "position" (e.g. "DECUBITUS") together with a vital signs test code (e.g. "DIABP") is submitted the string "true" (valid) or "false" (invalid) will be returned. In case the value for the test code itself is invalid, the string "unrecognized test code" is returned.
    If e.g. "DIABP" together with "LYING" is submitted, the string "false" is returned.
    If however "DIABP" together with "LATERAL DECUBITUS" is submitted, the string "true" is returned.

    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidPositionForCDISCTestCode/{testcode}/{position}
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidPositionForCDISCTestCode/DIABP/LATERAL DECUBITUS

    Remark: blanks in the "position" are unproblematic.


  • Get allowed standardized test results ("Character Result/Finding in Standard Format") for given test variable name (like EGTESTCD,VSTESTCD,SCTESTCD,TSPARMCD,TUTESTCD,TRTESTCD,SRTESTCD,CVFATSCD) and given value of the test code (limited to SDTM)
  • Last update: 2021-06-07, with information from all newest CDISC codetables, for TU, TR, RS (oncology), CV, DD, DS, EG, RP, SC, SS and VS.


    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidStandardResultsForCDISCTestCode/{variablename}/{testcode}

    Examples:
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/VSTESTCD/FRMSIZE
    will return "SMALL", "MEDIUM" and "LARGE" with their corresponding NCI codes.
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/SCTESTCD/RISKSOC
    will return 13 allowed values, from "CURRENT OR RECENT EMPLOYEE OR VOLUNTEER IN HOMELESS SHELTER" to "INCARCERATION" with their NCI codes.
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/TSPARMCD/BIOSPRET
    will return 3 values: "SAMPLES NOT RETAINED", "SAMPLES WITH DNA RETAINED" and "SAMPLES WITHOUT DNA RETAINED" with their NCI codes
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/EGTESTCD/TECHQUAL
    will return 63 allowed values, such as "BASELINE WANDER", "MUSCLE TREMOR", to "HOLTER LEAD FAIL", together with their NCI codes.
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/TRTESTCD/TUMSTATE
    will return 11 allowed values, such as "UNEQUIVOCAL", "PRESENT WITHOUT UNEQUIVOCAL PROGRESSION", to "UNEQUIVOCAL PROGRESSION", together with their NCI codes.

    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/CVFATSCD/ACMITYPE
    will return 7 values, from "TYPE 1 MYOCARDIAL INFARCTION" to "TYPE 5 MYOCARDIAL INFARCTION", together with their NCI codes.
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/TUTESTCD/DRCRLTLC
    will return 5 values: "DISTANT", "LOCAL", "LOCOREGIONAL", "REGIONAL", "UNKNOWN" together with their NCI codes.

    The following table provides a list of the variable names (first argument in the query) and for what "standardized test value variable" the results are returned:

    Test code variableTest result variable
    CVFATSCDCVFARS
    DDTESTCDDDSTRESC
    EGTESTCD (*)EGSTRESC
    RPTESTCDRPSTRESC
    SCTESTCDSCSTRESC
    SSTESTCDSSSTRESC
    TRTESTCDTRSTRESC
    TSPARMCDTSVAL
    TUTESTCDTUSTRESC
    VSTESTCDVSSTRESC

    (*): Includes both codelists EGTESTCD and HETESTCD (Holger tests)

    For use with RSTESTCD, an additional parameter is necessary, providing the categorization system
    The latter can be either (case sensitive): "CDISC", "RECIST-1-0", "RECIST-1-1", "iRECIST", "Lugano", "Rajkumar", or "Rano".
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidStandardResultsForCDISCTestCode/RSTESTCD/{testcode}/{system}

    Examples:
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/RSTESTCD/OVRLRESP/CDISC
    will return 36 values, from "CR" to "PSEUDORESPONSE" with their NCI codes, whereas:
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/RSTESTCD/OVRLRESP/Rano
    will return 7 values, with their NCI codes, and:
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/StandardizedResultsForCDISCTestCode/RSTESTCD/OVRLRESP/Rajkumar
    will return 10 values with their NCI codes.



  • Get whether a standardized test result ("Character Result/Finding in Standard Format") text value (EGSTRESC,VSSTRESC,SCSTRESC,TSVAL,TUIDRS,TRPROPRS,CVFARS) for a given Test code (EGTESTCD,VSTESTCD,SCTESTCD,TSPARMCD,TUTESTCD,TRTESTCD,CVFATSCD) is a valid value
  • When a standardized character result (e.g. "ACUTE RIGHT VENTRICULAR WALL MYOCARDIAL INFARCTION") for a given TESTCD (e.g. "MI" - Myocardial infarction in the EG domain) is sumbitted, the string "true" (valid) or "false" (invalid) will be returned. In case the value for the test code itself is invalid, the string "unrecognized test code" is returned.

    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidStandardResultForCDISCTestCode/{testcode}/{egstresc}

    Examples:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidStandardResultForCDISCTestCode/MI/ACUTE ANTEROLATERAL WALL MYOCARDIAL INFARCTION
    OR:
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidStandardResultForCDISCTestCode/AXISVOLT/NORTHWEST AXIS
    OR:
    http://xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidStandardResultForCDISCTestCode/CYTORESP/CYTOGENETIC CR
    OR:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidStandardResultForCDISCTestCode/HFPEFNW/CLINICALLY SIGNIFICANT OR RAPID WEIGHT GAIN

    Remark: blanks in the "position" are unproblematic, and also here the underlying database is case-unsensitive.

    As soon as more of these codetables are published on the CDISC website or available from the CDISC Library, they will be implemented

    SEND codetables have not been implemented yet


  • Get the CDISC submission term(s) from a CDISC synonym in the given model
  • Recent discussions in different forums have made it clear that the SDTM-IG (and other IGs) must be interpreted in such a way that when a variable has controlled terminology, the collected value must be mapped to the "CDISC Submission Value". This also (no exception!) applies to units in the variable --ORRESU. For example, if a concentration was measured in "mol/m3", one still must put the value "mmol/L" in LBORRESU, as the latter is the "CDISC submission value" from the "UNIT" codelist, and "mol/m3" is a "CDISC synonym" for it.

    Checking whether a collected term or unit is a synonym for a "CDISC submission value" is an extremely challenging (usually manual) task. Therefore we created a RESTful web service allowing to find out whether your value is a (by CDISC published) synonym of an SDTM submission value. This webservice can help in automating replacing "synonyms" into the "CDISC submission values".

    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCSubmissionTermsFromSynonym/{model}/{synonym}
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCSubmissionTermsFromSynonym/{model}/{synonym}/{codelistversion} (*)
    Example: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCSubmissionTermsFromSynonym/SDTM/mol/m3/2016-12-16
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCSubmissionTermsFromSynonym/SDTM/mol/m3 - supposes latest codelist version.

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/CDISCSubmissionTermsFromSynonym/SDTM/mol/m3/history

    As can easily be found out, this web service especially makes sense for units, and less for other terms, as usually the "CDISC synonym" is more a description than a real synonym. For example, you can submit:

    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SDTM/CDISCSubmissionTermsFromSynonym/myeloid maturation index, delivering the submission value "MYCEMIDX" as well as the correct (case-sensitive) writing "Myeloid Maturation Index".

    Remarks:


  • Get all synonyms for a given CDISC submission value and model
  • Returns all synonyms for a given CDISC submission value term and model

    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromCDISCSubmissionValue/{model}/{cdiscterm}
    OR:
    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromCDISCSubmissionValue/{model}/{cdiscterm}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromCDISCSubmissionValue/SDTM/Albumin - supposes latest codelist version
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromCDISCSubmissionValue/SDTM/Albumin/2017-12-22

    Will in both cases return 'Microalbumin' as well as 'Albumin' itself

    Example with "history" (demonstrating how synonyms were added in the course of time):
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromCDISCSubmissionValue/SDTM/LYMAT/history


  • Get all synonyms for a given SDTM submission value NCI code and given model
  • Returns all synonyms for a given SDTM submission value term by its NCI code

    URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromNCICode/{ncicode} URL: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromNCICode/{ncicode}/{codelistversion} (*)
    Example:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromNCICode/SDTM/C12472 - supposes latest codelist version
    OR: http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromNCICode/SDTM/C12472/2017-12-22

    Will in both cases return 'Body Fat' and 'Fat Tissue'

    Example with "history":
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/SynonymsFromNCICode/SDTM/C64818/history

    Remark: CDISC has been very inconsequent here. When you ask for the "synonyms" by the NCI code (which is the unique identifier), you will sometimes also get the "preferred term" (the "submission value"), and sometimes not at all. We have not tried to correct this.

    Remark: for the two "synonym" services, you can use the service for finding all possible "allowed" ways of writing a unit.
    The CDISC way of implementing "units" is however far from ideal: it is based on "tradition" (i.e. all possible ways of "traditionally" writing a unit), rather than on science.
    Unfortunately, CDISC is still refusing to allow the use of UCUM notation for units.



  • Soon coming: get whether a FASTRESC value is a valid value for a given FATESTCD when the "Findings About" is about "Cardiovascular" (Cardiovascular Studies Therapeutic Area Data Standard User Guide v1).


  • Remark for all services: Test codes and codelist names are case sensitive, so if you use:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidPositionForCDISCTestCode/diaBP/LATERAL DECUBITUS
    "unrecognized test code" will be returned, and if you use:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/ValidPositionForCDISCTestCode/DIABP/Lateral Decubitus
    "false" will be returned, as the valid value is "LATERAL DECUBITUS" (all uppercase).

    IMPORTANT: In the future, we will extend these "ValueList" services to other SDTM domains such as LB.
    For example, if you would submit "ml" together with "ALB" ("Albumin"), the answer would be "false", as the "Albumin" test is about a concentration
    Of course, it would be much better when CDISC switches to UCUM anyway, but also then, a similar web service can be provided (for example: is "mm[Hg]" a valid unit for test "SYSBP"?)


    Media types

    Our web services support the following media types:

    So depending on what your HTPP request looks like (i.e. which media type and in which order), you may get an XML response, or a JSON response.
    The XML response will look like:

    whereas the JSON response will look like:

    i.e. the server date time (UTC) will be returned, together with the original HTTP request URL (in the "WebServiceRequest" element) as well as the response of the query (in the element "Response").
    You can of course use the information to ensure that in your own application, the response is correctly treated.

    In case your application does not send an ACCEPT header, like in many XSLT and XQuery applications, you can still steer whether you get either XML or JSON, by appending either ".xml" or ".json" to the end of the request string.

    For example, the following will ALWAYS return XML:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/LatestCodeListVersion/SDTM.xml

    whereas the following will ALWAYS return JSON:
    http://www.xml4pharmaserver.com:8080/CDISCCTService2/rest/LatestCodeListVersion/SDTM.json


    Most of these services have been implemented in the Smart Dataset-XML Viewer, but you can of course use them in any software application that you want using RESTful web services.
    Also see our blogs at blogspot

    If you have any suggestions for other web services which have to do with CDISC and CDISC Controlled Terminology, please let us know.

    SDTM-CT version 2020-09-25

    SDTM-CT version 2020-09-25 (as published by CDISC) contains a serious quality issue: Codelist "Vital Signs Test Name" (NCI code C67153), contains contains an entry "TEMP", whereas it must be "Temperature" (NCI code C174446). As a consequence, CDISC published an "interim update" (2020-11-06), so we decided to retreat the version 2020-09-25.

    Courtesy of XML4Pharma - last update: April 2024