Retrieving Test Results

How To Retrieve Test Results

Pulling student test results is the primary way most Apps will interact with NWEA. The test-results/v1/growth API will help you to directly access this data. An API specification can be found here: https://nwea-icp-api.docs.stoplight.io/bulk-test-results

The test results you receive back from this endpoint depend on two things. One, the school must have students rostered in the current term. Two, you must have a data sharing agreement with the school.

These test results are filtered by proprietary NWEA business logic. We return the most relevant test result for each student taken in the last year. You will at most receive one test result per subject, per student.

With our recommended approach retrieving test results can be made in as few as two api calls.

 

All GET endpoints require the request to have the following header parameters:

  1. Content-Type (This would be 'application/json')
  2. apikey (The unique Consumer Key for the App)
  3. Authorization (The OAuth2 bearer access token obtained from /auth/v1/token)

Finding Schools

The prefered method is to call the /schools endpoint to get back all schools you have access to. https://nwea-icp-api.docs.stoplight.io/schools/schools/get-schools

Assuming the App has a datasharing agreement with at least one organization calling the following url will return a list of schools:

https://api.nwea.org/organizations/v1/schools

Example cURL command and response:

curl --request GET \
  --url https://api.nwea.org/organizations/v1/schools \
  --header 'apikey: xNM70DRInasXls8lc8vWViHE6bCYyAAw' \
  --header 'authorization: Bearer r9oW1trvk6ASqzb2gbkuZobyngOd' \
  --header 'content-type: application/json'
HTTP/1.1 200 OK
Connection:
keep-alive
Content-Length:
162718
Content-Type:
application/json; charset=utf-8
Date:
Tue, 25 Jul 2017 23:18:11 GMT
ETag:
W/"27b9e-/KmfKKc68HNggNYYhOiPWLnWB3A"
Server:
Apigee Router
X-Powered-By:
Express
[
  {
    "schoolBid": "a897459f-72b2-41b5-8bb6-43bacc309ac1",
    "name": "Mt. Bachelor Middle",
    "districtBid": "977c9f9f-c378-4ae8-b0ce-4516deb831e5"
  },
  {
    "schoolBid": "a98d4bd5-4446-42e2-9125-61b06c5f7ad2",
    "name": "Mt. Hood High",
    "districtBid": "977c9f9f-c378-4ae8-b0ce-4516deb831e5"
  },... 
]

Pulling Test Results

An api specification for our bulk-test-result endpoint can be found here: https://nwea-icp-api.docs.stoplight.io/bulk-test-results

For each school returned by the /schools endpoint you can call our bulk test result api, including the schoolBid as a query parameter. 

https://api.nwea.org/test-results/v1/growth?school-bid=a897459f-72b2-41b5-8bb6-43bacc309ac1

Example cURL command and response:

curl --request GET \
  --url 'https://api.nwea.org/test-results/v1/growth?school-bid=a897459f-72b2-41b5-8bb6-43bacc309ac1&=' \
  --header 'authorization: Bearer r9oW1trvk6ASqzb2gbkuZobyngOd'
HTTP/1.1 200 OK 
Connection:
keep-alive
Content-Length:
883
Content-Type:
application/json; charset=utf-8
Date:
Tue, 25 Jul 2017 23:26:17 GMT
ETag:
W/"373-C5H5hNgOtIfsbcha/jHlZcjvjDk"
Server:
Apigee Router
X-Powered-By:
Express
{
  "testResults": [
    {
      "testResultBid": "45edd0d8-c567-11ea-b787-00505693f64a",
      "studentBid": "bd1f4465-1bcf-4086-aea4-964482e2f039",
      "schoolBid": "a897459f-72b2-41b5-8bb6-43bacc309ac1",
      "termBid": "40ddb54b-1672-4510-9849-833bad94fab2",
      "subjectArea": "Language Usage",
      "grade": "7",
      "testName": "Demo Growth: Language 2-12",
      "testKey": "MAP2-3057",
      "testType": "S/G",
      "growthEventYn": true,
      "duration": 3600000,
      "status": "COMPLETED",
      "rit": 227,
      "standardError": 2.6,
      "ritScoreHigh": 230,
      "ritScoreLow": 224,
      "items": {
        "shown": 20,
        "correct": 10,
        "total": 20
      },
      "responseDisengagedPercentage": 0,
      "impactOfDisengagement": 0,
      "administrationStartDateTime": "2020-09-27T00:00:00Z",
      "administrationEndDateTime": "2020-09-27T17:00:00Z",
      "norms": [
        {
          "percentile": 84,
          "reference": "2020",
          "type": "achievement"
        }
      ],
      "modifiedDateTime": "2020-08-15T01:35:07.339Z",
      "instructionalAreas": [
        {
          "instructionalAreaBid": "106857",
          "instructionalAreaName": "Writing: Write, Revise Texts for Purpose and Audience",
          "score": 225,
          "standardError": 5.4,
          "scoreLow": 219.6,
          "scoreHigh": 230.4
        },
        {
          "instructionalAreaBid": "106859",
          "instructionalAreaName": "Language: Understand, Edit for Mechanics",
          "score": 228,
          "standardError": 4.4,
          "scoreLow": 223.6,
          "scoreHigh": 232.4
        },
        {
          "instructionalAreaBid": "106858",
          "instructionalAreaName": "Language: Understand, Edit for Grammar, Usage",
          "score": 233,
          "standardError": 4.1,
          "scoreLow": 228.9,
          "scoreHigh": 237.1
        }
      ]   
  },...
  "pagination": {
    "hasNextPage": true,
    "nextPage": "45f04cc8-c567-11ea-b787-00505693f64a"
  }
]

 

Please note that this api uses pagination with page sizes of 1000. Fetching a subsequent page is done by including the nextPage from the api response in your api call. The final page's hasNextPage field will be set to false.

https://api.nwea.org/test-results/v1/growth?next-page=45f04cc8-c567-11ea-b787-00505693f64a&school-bid=a897459f-72b2-41b5-8bb6-43bacc309ac1

Example Curl command:

curl --request GET \
  --url 'https://api.nwea.org/test-results/v1/growth?next-page=45f04cc8-c567-11ea-b787-00505693f64a&school-bid=a897459f-72b2-41b5-8bb6-43bacc309ac1&=' \
  --header 'authorization: Bearer lbycxdl8ETpARcXKbEx1NP9BZB6f'
HTTP/1.1 200 OK
Connection:
keep-alive
Content-Length:
883
Content-Type:
application/json; charset=utf-8
Date:
Tue, 25 Jul 2017 23:26:17 GMT
ETag:
W/"373-C5H5hNgOtIfsbcha/jHlZcjvjDk"
Server:
Apigee Router
{
  "testResults": [
    {
      "testResultBid": "45f04cc8-c567-11ea-b787-00505693f64a",
      "studentBid": "8a6d089e-1c44-4bff-82b4-f8c4f27dd847",
      "schoolBid": "a897459f-72b2-41b5-8bb6-43bacc309ac1",
      "termBid": "40ddb54b-1672-4510-9849-833bad94fab2",
      "subjectArea": "Language Usage",
      "grade": "7",
      "testName": "Demo Growth: Language 2-12",
      "testKey": "MAP2-3057",
      "testType": "S/G",
      "growthEventYn": true,
      "duration": 3600000,
      "status": "COMPLETED",
      "rit": 214,
      "standardError": 4,
      "ritScoreHigh": 218,
      "ritScoreLow": 210,
      "items": {
        "shown": 20,
        "correct": 10,
        "total": 20
      },
      "responseDisengagedPercentage": 0,
      "impactOfDisengagement": 0,
      "administrationStartDateTime": "2020-09-24T00:00:00Z",
      "administrationEndDateTime": "2020-09-24T17:00:00Z",
      "norms": [
        {
          "percentile": 54,
          "reference": "2020",
          "type": "achievement"
        }
      ],
      "modifiedDateTime": "2020-08-15T01:41:48.745Z",
      "instructionalAreas": [
        {
          "instructionalAreaBid": "106857",
          "instructionalAreaName": "Writing: Write, Revise Texts for Purpose and Audience",
          "score": 216,
          "standardError": 4.8,
          "scoreLow": 211.2,
          "scoreHigh": 220.8
        },
        {
          "instructionalAreaBid": "106859",
          "instructionalAreaName": "Language: Understand, Edit for Mechanics",
          "score": 222,
          "standardError": 5.3,
          "scoreLow": 216.7,
          "scoreHigh": 227.3
        },
        {
          "instructionalAreaBid": "106858",
          "instructionalAreaName": "Language: Understand, Edit for Grammar, Usage",
          "score": 220,
          "standardError": 5,
          "scoreLow": 215,
          "scoreHigh": 225
        }
      ]
    },...
]

  "pagination": {
    "hasNextPage": false,
    "nextPage": ""
  }
}