OpenAPI Reference

OpenAPI Reference

In this section

OpenAPI

The OpenAPI Swagger page lists the endpoints for the following Medrio APIs:

  • Data Entry API: Use the transactional endpoints to support imports and updates of data in all formats, including changing the grid data in lab forms
  • User Management API: Automated Identity Access Management
  • Subject Management API: Use this API to create, update, and delete subjects

To access the endpoints for the APIs, go to https://connectapi.medrio.com/swagger/index.html

Important: Use this reference page along with the OpenAPI Swagger page. Both pages provide information about the various API endpoints. In addition, all code samples on this page are written in Curl. If you need assistance with writing the code in another language, consult your software developer, or your Medrio Account Manager for Technical Consultation hours. If you need assistance with using Postman®, see Learning Postman.  

Note that OpenAPI (User Management, Subject Management, and Data Entry) respects the same rules and constraints as Medrio EDC. For example, if the data cannot be entered into a read-only variable/form or into skipped forms via the EDC, then OpenAPI responds with an error message. 

What are the User Types and Authentication Processes for OpenAPI? 

OpenAPI has two user types: Enterprise and Study.

Enterprise User

The Enterprise-level user has access to all the study data and is not limited by any roles and permissions. 

Important: As a best practice, we don’t recommend using the Enterprise user account to access the EDC study through the Medrio UI. In addition, this user type lacks functionality, as it cannot use the Data Entry API and Subject Management API, including the Subject Statuses endpoint. Therefore, we recommend using the Study-level user account with the necessary permissions when using OpenAPI. 

To authenticate as an Enterprise user: 

  1. Contact Technical Support using the Clinical Request Form. Once in the form, select API Change Request, then select customer level API and specify Yes for "Do you need to add an enterprise-level API user?" You will receive a Welcome to Medrio email with a link to create your new user account.
  2. Make a POST request to the OAuth OpenAPI endpoint to get a token; set the grant_type as ‘openapi’ and enter your API key as the customerAPIkey. Note that the base path of the OpenAPI is: 'https://connectapi.medrio.com. 

    OpenAPI Auth:

    curl --location --request POST 'https://connectapi.medrio.com/Oauth/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'username={USERNAME}' \
    --data-urlencode 'password={PASSWORD}' \
    --data-urlencode ‘customerApikey={APIKEY}’ \


    Response: 
    {
    "access_token": "b3712158cb5db9b4308406a304e8419d",
    "expiresUtc": "2021-09-07T17:29:00.9016974Z",
    "expires_in": 3600,
    "isTFAEnabled": false,
    "issuedUtc": "2021-09-07T16:29:00.9016974Z",
    "refresh_token": "24ba197c3709fadfbc50bb37012b9c5a",
    "token_type": "Bearer",
    "userId": "aac7e851-3c0a-4b10-b7a0-7b3a6abec682",
    "userName": "{USERNAME}"
    }

  3. Use the access token as the Bearer Token to make authenticated requests as the logged-in user.

Important: In the headers section of subsequent requests {"Authorization" : "Bearer [token] "}


Study User

The Study-level user only has access to the study data based on the user’s roles and permissions. You need the API Access permission and PHI permission assigned to your role to use OpenAPI as a Study-level user. Also, additional permissions may be needed depending on what data you want to access or change, including Form Data permissions. 

All Forms - Read

All Forms - Write

To authenticate as a Study user: 

  1. Make a POST request to the OAuth OpenAPI endpoint with your Medrio username and password to get a token. Set the grant_type as openapi. Note that the base path of the OpenAPI is: 'https://connectapi.medrio.com/

    Open API Auth:
    curl --location --request POST 'https://connectapi.medrio.com/Oauth/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode '{USERNAME}' \
    --data-urlencode {PASSWORD}' \
    --data-urlencode 'grant_type=openapi'


    Response:
    {
    "access_token": "111a8433c738eb572f57898684a3f1cd",
    "expires_in": 3600,
    "token_type": "Bearer",
    "refresh_token": "8490ac90272c6f0e11985ec8f15ef8db",
    "userName": '{USERNAME}’,
    "userId": "ea060f7c-86e2-4cbb-900b-a34740406491",
    "isTFAEnabled": false,
    "expiresUtc": "2022-06-03T20:41:33.3147811Z",
    "issuedUtc": "2022-06-03T19:41:33.3147811Z"
    }

  2. Use the access token as the Bearer Token to make authenticated requests as the logged-in user.

Important: In the headers section of subsequent requests {"Authorization" : "Bearer [token] "}


Single Sign-On Users 

Single sign-on users cannot access OpenAPI. However, non-SSO users on a domain can access OpenAPI by entering their username as domain/username in the username field for the authentication. For studies with SSO enabled, a non-SSO user is required to make the API calls.

OpenAPI Endpoints 

Configuration 

Method URL Description Study User Permissions
GET /api/v1/configuration/language Get languages No permissions needed
GET /api/v1/configuration/timezone Get timezones No permissions needed 

Data Entry 

Important: You cannot retrieve a subject visit template or write data to Unscheduled Visits. However, the Data Entry API does support Repeating Forms and Visits. Repeating Forms and Visits are targeted using the FormSequenceNumber and VisitSequenceNumber attribute in the payload. 

Method  URL Description  Study User Permissions Code Samples
GET /api​/v1​/study​/{studyId}​/subject​/{subjectId}​/visit Get subject visit collection for only one subject at a time Need at least the Form Data - No Access Show Form permission See GET Visit Code Sample
POST
/api/v1/study/{studyId}/SubjectVisitTemplate

Get subject visit template

Important: Only for one subject at a time. The request body must contain the following to submit the request:

  • Subject ID - unique identifier for subject
  • Visit ID - unique identifier for visit (not subject specific)
  • Form ID - unique identifier for form (not subject specific)

Use the GET /api/v1/study/{studyId}/subject/{subjectId}/visit endpoint to retrieve the Visit ID and Form ID. The GET /api/v1/study/{studyId}/subject provides the Subject ID number. 

Needs the Form Data - Read & Write permission for the form that you passed into the request body See POST Subject Visit Template Code Sample
PUT /api/v1/study/{studyId}/clearForm

Clear form data for collection point

Important: The reasonForDataChange is required when submitting this request. 

Need the Form Data - Write permission for the forms Visit https://connectapi.medrio.com/swagger/index.html
POST /api/v1/study/{studyId}/dataentry

Data entry or update record request

Need the Form Data - Write permission for the forms Visit https://connectapi.medrio.com/swagger/index.html


GET /api​/v1​/study​/{studyId}​/subject​/{subjectId}​/visit Code Sample

Example:
curl --location --request GET 'https://connectapi.medrio.com/api/v1/study/94f4b004-33af-42a3-9474-a8feb46dd86f/subject/4f8c024a-db86-4cbc-bd28-16b43237806a/visit' \
--header 'Authorization: Bearer 8725e26221b5a6f2f9483c2ed8e72582' \
--header 'Cookie: GCLB=CPOUsKaorMe1mgE'


Response:
{
"response": [
{
"collectionPointId": "32d9d811-ba7c-4871-ac51-32e6f23e56d4",
"dataEntered": true,
"formId": "bc728509-6087-4aad-a665-3918d94da60e",
"formName": "Demographics",
"formSequenceNumber": 0,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "Complete",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "78721ea3-f4f0-48da-80e1-b80e9f4df773",
"visitName": "Baseline Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": "711c5c29-a62f-4cbc-ba5b-bf797384aa2b",
"dataEntered": false,
"formId": "c6086de7-9ced-485c-8eec-56430e766aee",
"formName": "CDASH - Concomitant Medications",
"formSequenceNumber": 0,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotExpected",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "78721ea3-f4f0-48da-80e1-b80e9f4df773",
"visitName": "Baseline Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": null,
"dataEntered": false,
"formId": "509aa9c6-5aee-4242-aa0c-71f2cd216c1f",
"formName": "First Pregnancy Screening Form",
"formSequenceNumber": null,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotComplete",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "78721ea3-f4f0-48da-80e1-b80e9f4df773",
"visitName": "Baseline Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": null,
"dataEntered": false,
"formId": "278bdf89-c48d-4b81-be66-58f5344f52fa",
"formName": "Physical Examination",
"formSequenceNumber": null,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotComplete",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "78721ea3-f4f0-48da-80e1-b80e9f4df773",
"visitName": "Baseline Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": null,
"dataEntered": false,
"formId": "0d2f146e-7a8c-4d26-9b3e-ad9a12e2ebf1",
"formName": "Randomization",
"formSequenceNumber": null,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotComplete",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "78721ea3-f4f0-48da-80e1-b80e9f4df773",
"visitName": "Baseline Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": "4acdcd37-3e5a-4470-b5f7-745c40e934a2",
"dataEntered": false,
"formId": "12521329-9400-483d-815e-782ee7169ee3",
"formName": "CDASH - Vital Signs-1",
"formSequenceNumber": 1,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotExpected",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "1c17520c-39e3-46bf-ac94-bac8638daf4b",
"visitName": "Visit 1-1",
"visitSequenceNumber": 1
},
{
"collectionPointId": "38d05a5e-68cf-4418-a3ce-29dd67f9ae45",
"dataEntered": false,
"formId": "509aa9c6-5aee-4242-aa0c-71f2cd216c1f",
"formName": "First Pregnancy Screening Form",
"formSequenceNumber": 0,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotExpected",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "230fd746-3274-48bb-8874-e070a74623f4",
"visitName": "Office Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": "692196ba-16b7-4107-a081-8d02c7e11839",
"dataEntered": false,
"formId": "12521329-9400-483d-815e-782ee7169ee3",
"formName": "CDASH - Vital Signs",
"formSequenceNumber": 0,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotExpected",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "230fd746-3274-48bb-8874-e070a74623f4",
"visitName": "Office Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": "a6ac343d-85e6-4df0-9008-2580fe2f21ef",
"dataEntered": false,
"formId": "bc728509-6087-4aad-a665-3918d94da60e",
"formName": "Demographics",
"formSequenceNumber": 0,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotExpected",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "230fd746-3274-48bb-8874-e070a74623f4",
"visitName": "Office Visit",
"visitSequenceNumber": null
},
{
"collectionPointId": "3f4a69ed-728c-403e-bd7c-a8c1776aa02b",
"dataEntered": false,
"formId": "cd48b3b2-0b42-4686-9952-93ad02a25ef7",
"formName": "Demographics-1",
"formSequenceNumber": 0,
"isMonitored": false,
"locked": false,
"siteName": "Site A",
"status": "NotExpected",
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectName": "0001",
"visitGroupName": null,
"visitId": "bc04854e-1bcc-41ef-a603-c0b85848207c",
"visitName": "Follow-up",
"visitSequenceNumber": null

}
],
"processedSuccessfully": true,
"processMessage": "success"
}


POST /api/v1/study/{studyId}/SubjectVisitTemplate Code Sample

Example:
curl --location --request POST 'https://connectapi.medrio.com/api/v1/study/94f4b004-33af-42a3-9474-a8feb46dd86f/SubjectVisitTemplate' \
--header 'Authorization: Bearer 8725e26221b5a6f2f9483c2ed8e72582' \
--header 'Content-Type: application/json' \
--header 'Cookie: GCLB=CMTj0a2Jmt6GCA' \
--data-raw '{
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"visitId": "78721ea3-f4f0-48da-80e1-b80e9f4df773",
"formId": "bc728509-6087-4aad-a665-3918d94da60e",
"visitSequenceNumber": 0,
"formSequenceNumber": 0
}'

Response:
{
"response": {
"collectionPointDataLastUpdated": null,
"configLastUpdatedTimestamp": "2022-06-17T14:30:00.563+00:00",
"datums": [
{
"externalId": "ENROLLMENT_DATE",
"formObjectId": "ed6863a3-0555-4886-8643-b4e3436af455",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": true,
"options": [],
"order": 1,
"value": null,
"variableId": "92d4ffb4-231c-4132-bd4d-d431f145dd50",
"variableName": "Enrollment Date",
"variableType": "Date"
},
{
"externalId": "AGE_1",
"formObjectId": "9cc3ee46-0b00-44ed-8923-2ae19f6fda96",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [],
"order": 2,
"value": null,
"variableId": "9c6e68cd-ddbf-4980-b50b-ad6b2d3a956d",
"variableName": "Age",
"variableType": "Decimal"
},
{
"externalId": "FIRST_NAME",
"formObjectId": "5f6c53c3-1980-43aa-85f1-f483f42896b4",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [],
"order": 3,
"value": null,
"variableId": "86f71075-a487-427b-b123-91da67efe8f2",
"variableName": "First Name",
"variableType": "String"
},
{
"externalId": "LAST_NAME",
"formObjectId": "97171e60-89ca-49a9-af2b-c73136e330d4",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [],
"order": 4,
"value": null,
"variableId": "e2053b1e-c412-40fc-b358-1e9be9094a1c",
"variableName": "Last Name",
"variableType": "String"
},
{
"externalId": "GENDER__DEM_",
"formObjectId": "5d9eb616-00b6-4406-bd57-a3d4166e6296",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [
{
"selected": false,
"value": "F",
"variableValueId": "379c6d87-a11d-4b2f-adfe-3ddabad6a3f7"
},
{
"selected": false,
"value": "M",
"variableValueId": "05f434fd-dcb5-47b4-8a5e-d12e43bbe271"
}
],
"order": 5,
"value": null,
"variableId": "e35d932f-f7cb-45a7-8b9f-f05227846d43",
"variableName": "Gender (Dem)",
"variableType": "Categorical"
},
{
"externalId": "ETHNIC",
"formObjectId": "4a84085f-fc8a-4103-a4ef-b2086f6758b3",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [
{
"selected": false,
"value": "American Indian",
"variableValueId": "15b8c9b5-e585-4726-b846-f79af40eb857"
},
{
"selected": false,
"value": "Asian / Pacific Islander",
"variableValueId": "34ff3618-ebe2-400d-a38e-d8ea06cb8748"
},
{
"selected": false,
"value": "Black / African American",
"variableValueId": "1e5befe2-b5c3-4372-a24a-a0833bef5fba"
},
{
"selected": false,
"value": "Latino / Hispanic",
"variableValueId": "2692b9fc-2b16-412d-8a51-b2e803d62955"
},
{
"selected": false,
"value": "White / Caucasian",
"variableValueId": "533f0a36-6095-454d-9623-43ffbfb56d1c"
},
{
"selected": false,
"value": "Other",
"variableValueId": "ec481678-6c31-4f23-9b9d-c0abffbbaad5"
}
],
"order": 6,
"value": null,
"variableId": "af6da6e4-54ab-4525-9897-cf3d2abba675",
"variableName": "Ethnicity",
"variableType": "Categorical"
},
{
"externalId": "LATINOYN",
"formObjectId": "24db2a0f-95b8-42dc-ae69-230a7f6249d8",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [
{
"selected": false,
"value": "Yes",
"variableValueId": "93e70bee-62cc-4372-88d7-bc2c9a8270be"
},
{
"selected": false,
"value": "No",
"variableValueId": "78830937-be38-407c-8854-b341c32ace0d"
}
],
"order": 7,
"value": null,
"variableId": "9341bd29-54fd-456f-a511-061db7d1c77f",
"variableName": "NIH Standard: Latino",
"variableType": "Boolean"
},
{
"externalId": "RACE",
"formObjectId": "36c6af0f-6e6c-4beb-a01e-ed1cc6f12d79",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [
{
"selected": false,
"value": "American Indian or Alaska Native",
"variableValueId": "8b5fd434-b7f3-4710-b238-484f7edccd38"
},
{
"selected": false,
"value": "Asian",
"variableValueId": "948bca27-e1c0-494c-b220-86d228c2f60b"
},
{
"selected": false,
"value": "Black or African American",
"variableValueId": "58908904-1201-4854-b3b9-a532404575b0"
},
{
"selected": false,
"value": "Native Hawaiian or Other Pacific Islander",
"variableValueId": "ee88a355-1e3e-4b37-89b6-d816eaaee38b"
},
{
"selected": false,
"value": "White",
"variableValueId": "086973ea-044f-4280-a4e6-46fd941b6dc3"
},
{
"selected": false,
"value": "Other",
"variableValueId": "c4fce23f-11ed-4ecd-920d-74e28bdae2bf"
}
],
"order": 8,
"value": null,
"variableId": "09a42bea-8f4d-4c69-9884-4d7a3129237f",
"variableName": "NIH Standard: Race",
"variableType": "MultiCategorical"
},
{
"externalId": "SMOKER",
"formObjectId": "0cf46ccd-03db-429b-874f-c9600430696f",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [
{
"selected": false,
"value": "Yes",
"variableValueId": "db752007-807b-4f1c-8d4b-ceeffeaf39d3"
},
{
"selected": false,
"value": "No",
"variableValueId": "55ce64cb-0aa2-4823-a021-55a21836b6e1"
}
],
"order": 9,
"value": null,
"variableId": "6fd99b1b-1cbf-491d-b3c3-d06e6b38ba7d",
"variableName": "Smoker",
"variableType": "Categorical"
},
{
"externalId": "PREGNANT",
"formObjectId": "cf0303d5-2a3c-4abd-8cc3-fa2721904b3c",
"isCalculated": false,
"isLocked": false,
"isReadOnly": false,
"isRequired": false,
"options": [
{
"selected": false,
"value": "Yes",
"variableValueId": "dbbfeede-8f7a-40ef-b6b6-95c6c4495a33"
},
{
"selected": false,
"value": "No",
"variableValueId": "cb7ca3fc-d5ae-4a3b-b991-b501193aa980"
}
],
"order": 10,
"value": null,
"variableId": "6288ff03-1f91-4cc7-bc3b-ae77581f5fb2",
"variableName": "Pregnant",
"variableType": "Categorical"
},
{
"externalId": "BMI",
"formObjectId": "0b37b18b-0ba9-4ee3-b4dc-77dc8f9575c0",
"isCalculated": true,
"isLocked": false,
"isReadOnly": true,
"isRequired": false,
"options": [],
"order": 11,
"value": null,
"variableId": "e81a7513-bf1e-435c-b007-1a69eba21398",
"variableName": "BMI",
"variableType": "Decimal"
}
],
"formId": "bc728509-6087-4aad-a665-3918d94da60e",
"formName": "Demographics",
"formSequenceNumber": null,
"grids": [],
"reasonForChange": null,
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectIdentifier": "0001",
"visitId": "78721ea3-f4f0-48da-80e1-b80e9f4df773",
"visitName": "Baseline Visit",
"visitSequenceNumber": 0
},
"processedSuccessfully": true,
"processMessage": "success"
}

Groups

Method 

URL

Description 

Study User Permissions

GET

/api/v1/study/{studyId}/group

Get study groups

N/A



Memberships

Method 

URL

Description 

Study User Permissions

POST

/api/v1/study/{studyId}/user

Add a user to a study 

Manage Users permission

GET

/api/v1/study/{studyId}/user

Get study users with membership information


Membership information includes:

  • First Name
  • Last Name
  • Email 
  • SSO?
  • Roles
  • Sites
  • User ID
  • User Name

Manage Users permission

PUT

/api/v1/study/{studyId}/user/{userId}/role

Assign roles to users

Manage Users permission

PUT

/api/v1/study/{studyId}/user/{userId}/site

Assign sites to users

Important: If all site access is enabled for a user, the user is granted access to all sites and any future created sites. If all site access is not enabled, all existing sites are still assigned to the user, but the option for any future sites has been canceled. It is not possible to assign one site to a user and enable or disable all site access.

Manage Users permission

DELETE

/api/v1/study/{studyId}/user/{userId}/role/{roleId}

Remove user’s role

Manage Users permission

DELETE

/api/v1/study/{studyId}/user/{userId}/site/{siteId}

Remove user from site

Manage Users permission

DELETE

/api/v1/study/{studyId}/user/{userId}

Remove user from study

Manage Users permission


Bulk Upload

Important: Only the Study-level user can access the Bulk Upload API endpoints. A file cannot be uploaded until the mapping is created in Medrio. For more information, see Bulk Upload. The API does not accept maps with ‘provide values at upload’ (e.g., hasFixedValues: true ). With the Bulk Upload API, users can upload multiple files, but only one file at a time will process per study. Medrio does not guarantee that files are processed in the order they were received. You need to manage if a specific order of upload is needed, and jobs submitted using the API blocks users from using the Medrio UI to upload additional jobs until all pending submissions are complete.

The base URL for Bulk Upload is based on the study's region:
  • NA: https://jobs-api.medrio.com
  • EU: https://eu-jobs-api.medrio.com
  • APAC: https://apac-jobs-api.medrio.com

Method 

URL

Description 

Study User Permissions

Code Samples

POST

/api/v1/study/{studyId}/job/bulkupload/uploadFile

Upload the file for Bulk Upload

Important: Two enums are related to the POST uploadFile request and must be included in the request body: 

OverwriteBehavior

  • DontOverwrite = 1
  • Overwrite = 2

ProgressUpdateOptions

  • WhenCompleted=1,
  • Every15Minutes=2,
  • Every30Minutes=3,
  • Every60Minutes=4

Upload Data - Access to the form(s) the data will be uploaded to 

Visit https://jobs-api.medrio.com/swagger/index.html

GET

/api/v1/study/{studyId}/job/bulkupload/uploadFile

Get bulk upload file job details

Upload Data

Visit https://jobs-api.medrio.com/swagger/index.html

GET

 /api/v1/study/{studyId}/job/bulkupload/map

Get bulk upload mappings associated with study

Upload Data

Job

 

 

 

 

GET

/api/v1/study/{studyId}/job

Get information for jobs associated with study

N/A

Visit https://jobs-api.medrio.com/swagger/index.html

OAuth

 

 

 

 

POST


​/Oauth​/token

Get an access token for the Bulk Upload API

N/A

Visit https://jobs-api.medrio.com/swagger/index.html


OAuth

Method 

URL

Description 

Study User Permissions

POST

/Oauth/token

Use endpoint to get an access token

Access API permission and PHI permission



Roles

Method 

URL

Description 

Study User Permissions

GET

/api/v1/study/{studyId}/role

Get study roles

Manage Users permission

Sites

Method 

URL

Description 

Study User Permissions

GET

/api/v1/study/{studyId}/site

Get study sites

Access to the sites

Studies

Method 

URL

Description 

Study User Permissions

Code Samples

GET

/api/v1/study

Get studies

Important: Use this endpoint to get the study ID number. 

Needs access to the study

See GET Study Code Sample

GET

/api/v1/study/{studyID}/domain

Get domain name linked to a study and if SSO is enabled

Needs access to the study

Visit https://connectapi.medrio.com/swagger/index.html

 

GET

/api/v1/study/feature/{feature}

Filter studies based on the enabled features. You can filter for the following features:


  • ExpandedDDCAuditTrail
  • CarryoverVariableEnhancement
  • EProRemoteSchedulerEnhancements
  • EProInClinic
  • ByoReportingAdvanced
  • DataViewsApi
  • Labs
  • RespectEProVasVerticalLabelPosition
  • NotificationsTextSms
  • RandomizationTrialSupplyManagement
  • Consent
  • SiteManagement
  • Ctms
  • ContentManagement
  • IncreaseRepeatedFormsLimit
  • Emvr

Access to the studies

Visit https://connectapi.medrio.com/swagger/index.html

GET

/api/v1/study/{studyId}/reasonForDataChange

Get a list of reasons for data change. Required for data entry/update

Need access to the studies 

Visit https://connectapi.medrio.com/swagger/index.html


GET /api/v1/study Code Sample

Example:
curl --location --request GET 'https://connectapi.medrio.com/api/v1/study' \
--header 'Authorization: Bearer 5f472f3f863466da71a4adae71ede801' \
--header 'Cookie: GCLB=COPbyaS4_bSswQE'


Response:

{
"response": [
{
"features": {},
"instanceId": 17,
"isApiAccessAllowed": true,
"isEPro": true,
"region": "NA",
"studyId": "eebdb2a6-2f0e-4c37-80c8-95a8c74a3d0f",
"title": "2020 Example Study - DEV"
},
{
"features": {
"d2747f06-da6f-478c-a865-13400fb7c623": "ExpandedDDCAuditTrail",
"ca58b688-b2b3-4628-b2e0-1bb8b0cbc150": "CarryoverVariableEnhancement",
"cee7d5f8-b0f0-4863-92f8-29834ada5242": "EProRemoteSchedulerEnhancements",
"5a2b9ff5-c86f-48a8-9683-2ff556981cf2": "EProInClinic",
"97b3955b-cd8d-4647-bd20-6ebbf882f236": "ByoReportingAdvanced",
"ba0a892a-1573-430c-bb97-c85458041582": "DataViewsApi",
"29d7707d-6a91-4f84-8143-ec3df268898c": "Labs",
"576cef76-287f-4c42-a091-f9f91e72469b": "RespectEProVasVerticalLabelPosition"
},
"instanceId": 12,
"isApiAccessAllowed": true,
"isEPro": true,
"region": "NA",
"studyId": "94f4b004-33af-42a3-9474-a8feb46dd86f",
"title": "2021: Example Training Study - DEV"
},
{
"features": {
"d2747f06-da6f-478c-a865-13400fb7c623": "ExpandedDDCAuditTrail",
"ca58b688-b2b3-4628-b2e0-1bb8b0cbc150": "CarryoverVariableEnhancement",
"cee7d5f8-b0f0-4863-92f8-29834ada5242": "EProRemoteSchedulerEnhancements",
"5a2b9ff5-c86f-48a8-9683-2ff556981cf2": "EProInClinic",
"97b3955b-cd8d-4647-bd20-6ebbf882f236": "ByoReportingAdvanced",
"ba0a892a-1573-430c-bb97-c85458041582": "DataViewsApi",
"29d7707d-6a91-4f84-8143-ec3df268898c": "Labs",
"576cef76-287f-4c42-a091-f9f91e72469b": "RespectEProVasVerticalLabelPosition"
},
"instanceId": 12,
"isApiAccessAllowed": true,
"isEPro": true,
"region": "NA",
"studyId": "95be701f-9f7d-47d3-91f8-9a959a168e40",
"title": "2021: Example Training Study - LIVE"
},
{
"features": {
"d2747f06-da6f-478c-a865-13400fb7c623": "ExpandedDDCAuditTrail",
"ca58b688-b2b3-4628-b2e0-1bb8b0cbc150": "CarryoverVariableEnhancement",
"31650381-5a8f-42af-ab18-1eacc0faeb02": "RandomizationTrialSupplyManagement",
"fa874e92-ca0d-4836-acd3-2108f72b80aa": "IncreaseRepeatedFormsLimit",
"cee7d5f8-b0f0-4863-92f8-29834ada5242": "EProRemoteSchedulerEnhancements",
"89cae73b-b1cf-49ee-b8d4-5ff3b4bbb514": "ContentManagement",
"97b3955b-cd8d-4647-bd20-6ebbf882f236": "ByoReportingAdvanced",
"650aa5b6-49b0-4281-b934-9d0fa5ae4663": "RespectEProVasWidth",
"afd9f5da-bca6-4577-a02d-a417d2d28249": "Consent",
"81959374-a8bd-49b7-8fbe-aaaa1c3e5a4f": "Emvr",
"5bf307cc-45d8-41bd-a3dd-ab9598a571e4": "TargetedMonitoring",
"8769c17b-651c-43e3-be26-ad501aaa2163": "NewDataEntry",
"ba0a892a-1573-430c-bb97-c85458041582": "DataViewsApi",
"4538183d-6619-4ddf-9025-d1c70ffbc501": "SiteManagement",
"83927832-d6bc-4cdb-8135-e06238ad4326": "Ctms",
"29d7707d-6a91-4f84-8143-ec3df268898c": "Labs",
"e64074dc-fb56-4368-b06c-f235142ec307": "LegacyEditSubjectProgress",
"576cef76-287f-4c42-a091-f9f91e72469b": "RespectEProVasVerticalLabelPosition",
"7ced438a-4799-4e17-ad4b-fd492982d4aa": "NotificationsTextSms"
},
"instanceId": 12,
"isApiAccessAllowed": true,
"isEPro": true,
"region": "NA",
"studyId": "be1ff688-d38c-4a27-9154-4680b18ceaf8",
"title": "Rebecca Sandbox Study%$$$ - DEV"
}
],
"processedSuccessfully": true,
"processMessage": "success"
}

Subjects

Method 

URL

Description 

Study User Permissions

Code Samples

GET

/api/v1/study/{studyId}/subject

Get a list of active subjects

Important: Use this endpoint to get the Subject ID of a subject  

Enroll Subjects permission

See GET Subject Code Sample

GET

/api/v1/study/{studyId}/subject/subjectStatus/deleted

Get a list of deactivated subjects.

Delete/Undelete Subjects permission

Visit https://connectapi.medrio.com/swagger/index.html

POST

/api/v1/study/{studyId}/subject/medrioIdentifier

Create a subject (Medrio identifier only)

Enroll subjects permission

Visit https://connectapi.medrio.com/swagger/index.html

PUT

/api​/v1​/study​/{studyId}​/subject​/medrioIdentifier

Update a subject (Medrio Identifier only)

Edit Subject Information permission

Visit https://connectapi.medrio.com/swagger/index.html

POST

/api/v1/study/{studyId}/subject/subjectIdentifier

Create a subject (Subject identifier)

Enroll subjects permission

Visit https://connectapi.medrio.com/swagger/index.html

PUT 

PUT /api/v1/study/{studyId}/subject/subjectIdentifier

Update a subject (Subject identifier)

Edit Subject information permission

Visit https://connectapi.medrio.com/swagger/index.html

POST 



/api/v1/study/{studyId}/subject/eproMedrioIdentifier

Create an ePRO subject (Medrio identifier only)

Enroll Subject permission

Visit https://connectapi.medrio.com/swagger/index.html



PUT 

/api/v1/study/{studyId}/subject/eproMedrioIdentifier

Update an ePRO subject (Medrio identifier only)

Update Subject Information permission

Visit https://connectapi.medrio.com/swagger/index.html

POST 

/api/v1/study/{studyId}/subject/eproSubjectIdentifier

Create an ePRO subject (Subject identifier)

Enroll Subject permission

Visit https://connectapi.medrio.com/swagger/index.html

PUT

/api/v1/study/{studyId}/subject/eproSubjectIdentifier

Update an ePRO subject (Subject identifier)

Update Subject Information permission

Visit https://connectapi.medrio.com/swagger/index.html

PUT

/api/v1/study/{studyId}/subject/deactivate

Deactivates (soft-deletes) a subject.

Delete/Undelete Subjects permission

Visit https://connectapi.medrio.com/swagger/index.html

PUT

/api/v1/study/{studyId}/subject/activate

/api/v1/study/{studyId}/subject/activate

Delete/Undelete Subjects permission

Visit https://connectapi.medrio.com/swagger/index.html


GET /api/v1/study/{studyId}/subject Code Sample

 Example:

curl --location --request GET 'https://connectapi.medrio.com/api/v1/study/94f4b004-33af-42a3-9474-a8feb46dd86f/subject' \
--header 'Authorization: Bearer 0709848b041f7200dc87f7b6274a5dcf' \
--header 'Cookie: GCLB=CLD8-PXGxqOnOw'

Response: 
{
"response": [
{
"subjectId": "4f8c024a-db86-4cbc-bd28-16b43237806a",
"subjectIdentifier": "0001",
"subjectStatus": {
"subjectStatusId": "4befe54e-71ab-4522-927f-4089b5d2c780",
"name": "Excluded After Enrollment",
"enrolled": false,
"excluded": true,
"priority": 2
},
"group": {
"groupId": "3e423d98-928a-4482-a61a-8627fbf02b23",
"externalId": "Group_A",
"name": "Group A",
"enrollmentGoal": null,
"enrollmentLimit": null,
"disabled": false
},
"site": {
"siteId": "8be63732-d254-45d3-b73c-3daf5cd53112",
"externalId": "Site_A",
"name": "Site A",
"enrollmentGoal": 100,
"enrollmentLimit": 120
},
"email": null,
"language": "en-US",
"timeZone": "Pacific Standard Time",
"isRemote": true,
"reasonForDeletion": null
},
{
"subjectId": "11d192f5-ebae-40a8-8ef1-383c4b807600",
"subjectIdentifier": "0002",
"subjectStatus": {
"subjectStatusId": "77f77c4a-f775-4451-b9ba-9cbc7882c08a",
"name": "Enrolled",
"enrolled": true,
"excluded": false,
"priority": 1
},
"group": {
"groupId": "3e423d98-928a-4482-a61a-8627fbf02b23",
"externalId": "Group_A",
"name": "Group A",
"enrollmentGoal": null,
"enrollmentLimit": null,
"disabled": false
},
"site": {
"siteId": "8be63732-d254-45d3-b73c-3daf5cd53112",
"externalId": "Site_A",
"name": "Site A",
"enrollmentGoal": 100,
"enrollmentLimit": 120
},
"email": null,
"language": "en-US",
"timeZone": "Pacific Standard Time",
"isRemote": true,
"reasonForDeletion": null
},
{
"subjectId": "b2e15b3c-d15a-4b66-ae0f-0c8922bb569f",
"subjectIdentifier": "0003",
"subjectStatus": {
"subjectStatusId": "77f77c4a-f775-4451-b9ba-9cbc7882c08a",
"name": "Enrolled",
"enrolled": true,
"excluded": false,
"priority": 1
},
"group": {
"groupId": "3e423d98-928a-4482-a61a-8627fbf02b23",
"externalId": "Group_A",
"name": "Group A",
"enrollmentGoal": null,
"enrollmentLimit": null,
"disabled": false
},
"site": {
"siteId": "8be63732-d254-45d3-b73c-3daf5cd53112",
"externalId": "Site_A",
"name": "Site A",
"enrollmentGoal": 100,
"enrollmentLimit": 120
},
"email": null,
"language": "en-US",
"timeZone": "Pacific Standard Time",
"isRemote": true,
"reasonForDeletion": null
},
{
"subjectId": "20b7af32-ee10-4596-9413-b8465547d99e",
"subjectIdentifier": "0004",
"subjectStatus": {
"subjectStatusId": "77f77c4a-f775-4451-b9ba-9cbc7882c08a",
"name": "Enrolled",
"enrolled": true,
"excluded": false,
"priority": 1
},
"group": {
"groupId": "3e423d98-928a-4482-a61a-8627fbf02b23",
"externalId": "Group_A",
"name": "Group A",
"enrollmentGoal": null,
"enrollmentLimit": null,
"disabled": false
},
"site": {
"siteId": "8be63732-d254-45d3-b73c-3daf5cd53112",
"externalId": "Site_A",
"name": "Site A",
"enrollmentGoal": 100,
"enrollmentLimit": 120
},
"email": null,
"language": "en-US",
"timeZone": "Pacific Standard Time",
"isRemote": true,
"reasonForDeletion": null
},
{
"subjectId": "6ebdcad2-1b5f-42e4-a3d8-018f7baf27ac",
"subjectIdentifier": "0005",
"subjectStatus": {
"subjectStatusId": "77f77c4a-f775-4451-b9ba-9cbc7882c08a",
"name": "Enrolled",
"enrolled": true,
"excluded": false,
"priority": 1
},
"group": {
"groupId": "3e423d98-928a-4482-a61a-8627fbf02b23",
"externalId": "Group_A",
"name": "Group A",
"enrollmentGoal": null,
"enrollmentLimit": null,
"disabled": false
},
"site": {
"siteId": "8be63732-d254-45d3-b73c-3daf5cd53112",
"externalId": "Site_A",
"name": "Site A",
"enrollmentGoal": 100,
"enrollmentLimit": 120
},
"email": null,
"language": "en-US",
"timeZone": "Pacific Standard Time",
"isRemote": true,
"reasonForDeletion": null
},
{
"subjectId": "316d498a-b46d-43a9-8d88-25899fb75562",
"subjectIdentifier": "0006",
"subjectStatus": {
"subjectStatusId": "77f77c4a-f775-4451-b9ba-9cbc7882c08a",
"name": "Enrolled",
"enrolled": true,
"excluded": false,
"priority": 1
},
"group": {
"groupId": "3e423d98-928a-4482-a61a-8627fbf02b23",
"externalId": "Group_A",
"name": "Group A",
"enrollmentGoal": null,
"enrollmentLimit": null,
"disabled": false
},
"site": {
"siteId": "8be63732-d254-45d3-b73c-3daf5cd53112",
"externalId": "Site_A",
"name": "Site A",
"enrollmentGoal": 100,
"enrollmentLimit": 120
},
"email": null,
"language": "en-US",
"timeZone": "Pacific Standard Time",
"isRemote": false,
"reasonForDeletion": null
}
],
"processedSuccessfully": true,
"processMessage": "success"
}

SubjectStatuses

Method 

URL

Description 

Study User Permissions

GET

/api​/v1​/study​/{studyId}​/subjectStatus

Get study groups

Needs access to the studies and subjects



Users

Method 

URL

Description 

Study User Permissions

GET

/api/v1/user

Get all Medrio users for a customer, no matter the study affiliation or study status

Important: Only for Enterprise-level users.

 

PUT

/api/v1/user

Update user account

Important: Only for Enterprise-level users. 

N/A 

PUT

/api/v1/user/changePassword

Change Enterprise user password

Important: Only for Enterprise-level users.

N/A

OpenAPI Status Errors 

400 Error 

{

    "message": "Unable to authenticate user with supplied credentials.",

    "traceId": "0HMHB745825QT:00000002"

}

Solution: This error occurs if you don’t have the correct credentials. To solve this error, make sure you’re using the correct login credentials. 

401 Error 

{

    "StatusCode": 401,

    "TraceId": "0HMHB745825T3:00000002",

    "Message": "User is not authenticated."

}

Solution: This error occurs if you aren’t authenticated. To solve this error, check that your token is correct or not expired. If the token expires, get a new one. OpenAPI tokens expire within an hour. 

403 Error

Solution: User does not have permission to access the form. To solve this error, check that you have the proper permissions in the EDC study. 

409 Error

415 Error 

{

    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.13",

    "title": "Unsupported Media Type",

    "status": 415,

    "traceId": "00-279284b83aecc741976e556a6012c517-772fba5fee768241-00"

}

Solution: This error occurs if the request body is not sent over in JSON. To solve this error, change the request body to JSON. 

Still have a Question? Ask the Community