Scholaro GPA Report API - Developer Documentation (Bulk & Webhooks)

GPA Report Integration Guide

Overview

The Scholaro GPA Report integration allows institutions to automatically generate GPA reports from transcripts using multiple methods depending on their workflow.

You can choose from the following options:

  1. API (Single Report) - create one report at a time
  2. Bulk API Upload - process multiple transcripts in a ZIP file
  3. SFTP Upload - fully automated file-based integration

All methods use the same underlying processing and produce identical GPA reports.


Choosing the Right Method

MethodBest for
API (Single)Real-time processing, one transcript at a time
Bulk APIBatch uploads via ZIP
SFTPFully automated pipelines and high-volume processing

Authentication

To use the API, include your API key in every request.

Header:

  1. X-API-Key: your_signing_secret_here

Note:
You can obtain your API key (Signing Secret) from the Developer page:
https://www.scholaro.com/app/developer/webhooks


Single Report API

POST


Request Parameters

Send data as multipart/form-data.

FieldTypeRequiredDescription
countrystringYesCountry of study
filePDF fileYesTranscript file
applicant_namestringNoApplicant name
report_namestringNoCustom report name
date_of_birthstringNoAvailable if enabled
custom_field_1stringNoOptional
custom_field_2stringNoOptional
custom_field_3stringNoOptional

Response

  1. {
  2. "message": "string",
  3. "url": "string",
  4. "gpa_report": {
  5. "report_id": 123456,
  6. "applicant_name": "string",
  7. "report_name": "string",
  8. "country": "string",
  9. "institution": "string",
  10. "total_credits": 0.0,
  11. "total_points": 0.0,
  12. "gpa": 0.0,
  13. "grades": []
  14. }
  15. }

Example Requests

cURL

  1. curl -X POST https://www.scholaro.com/appAPI/api/gpa-report/new \
  2. -H "X-API-Key: your_signing_secret_here" \
  3. -F "country=India" \
  4. -F "applicant_name=Jane Smith" \
  5. -F "report_name=Fall 2024 GPA Report" \
  6. -F file=@/path/to/transcript.pdf

C#

  1. using var client = new HttpClient();
  2. client.DefaultRequestHeaders.Add("X-API-Key", "your_signing_secret_here");

  3. using var content = new MultipartFormDataContent();
  4. content.Add(new StringContent("Mexico"), "country");
  5. content.Add(new StringContent("John Smith"), "applicant_name");
  6. content.Add(new StringContent("Fall 2024 GPA Report"), "report_name");

  7. string transcriptPath = "./path/to/transcript.pdf";
  8. var fileContent = new ByteArrayContent(File.ReadAllBytes(transcriptPath));
  9. fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

  10. content.Add(fileContent, "file", "transcript.pdf");

  11. var response = await client.PostAsync(
  12. "https://www.scholaro.com/appAPI/api/gpa-report/new",
  13. content
  14. );

JavaScript (Fetch)

  1. import { FormData } from 'formdata-node';
  2. import { fileFromPath } from 'formdata-node/file-from-path';

  3. const formData = new FormData();
  4. formData.append('country', 'Germany');
  5. formData.append('applicant_name', 'Jack Smith');
  6. formData.append('report_name', 'Fall 2024 GPA Report');

  7. const file = await fileFromPath("./path/to/transcript.pdf");
  8. formData.append('file', file);

  9. const response = await fetch(
  10. 'https://www.scholaro.com/appAPI/api/gpa-report/new',
  11. {
  12. method: 'POST',
  13. headers: {
  14. 'X-API-Key': 'your_signing_secret_here'
  15. },
  16. body: formData
  17. }
  18. );

Python

  1. import requests

  2. url = "https://www.scholaro.com/appAPI/api/gpa-report/new"

  3. headers = {
  4. "X-API-Key": "your_signing_secret_here"
  5. }

  6. files = {
  7. 'file': ('transcript.pdf', open('/path/to/transcript.pdf', 'rb'), 'application/pdf')
  8. }

  9. data = {
  10. 'country': 'Brazil',
  11. 'applicant_name': 'Jane Smith',
  12. 'report_name': 'Fall 2024 GPA Report'
  13. }

  14. response = requests.post(url, headers=headers, files=files, data=data)
  15. result = response.json()

Requirements & Access

Requirement:
The transcript file must be a valid PDF.

Access:
This API is available only to institutional Premium users.


Bulk API Upload

Overview

The Bulk API allows you to create multiple GPA reports in a single request by uploading a ZIP file containing transcripts and a manifest file.

Note:
Bulk processing is asynchronous. Reports are generated in the background.


Endpoint

POST


Request

Send multipart/form-data with a single file:

  1. file: bulk-upload.zip
  • Must be a .zip file
  • Max size: 100 MB
  • Must include:
    • manifest.csv
    • transcript files (PDF, JPG, JPEG, PNG)

manifest.csv Format

Each row represents one report:

  1. file_name,country,applicant_name,report_name,date_of_birth,custom_field_1,custom_field_2,custom_field_3
  2. brazil-transcript.pdf,Brazil,Jane Smith,Fall 2024 Report,01/15/1995,Field1,Field2,Field3
  3. india-transcript.pdf,India,John Doe,Spring 2024 Report,,,,

Fields

FieldRequiredDescription
file_nameYesName of transcript file in ZIP
countryYesCountry for GPA conversion
applicant_nameNoExtracted automatically if empty
report_nameNoCustom report name
date_of_birthNoIf enabled
custom_field_1-3NoOptional fields

Response (202 Accepted)

  1. {
  2. "batch_id": "5797602d-f05f-495b-8cb9-220c8e2c5df5",
  3. "total_items": 5,
  4. "status_url": "/api/gpa-report/bulk/{batch_id}"
  5. }

Example (cURL)

  1. curl -X POST https://www.scholaro.com/appAPI/api/gpa-report/bulk \
  2. -H "X-API-Key: your_signing_secret_here" \
  3. -F file=@/path/to/bulk-upload.zip

Error Responses

StatusDescription
400Invalid request (missing ZIP, manifest, files, or limits exceeded)
401Unauthorized (invalid API key)

Batch Status

Endpoint

GET


Response

  1. {
  2. "batch_id": "5797602d-f05f-495b-8cb9-220c8e2c5df5",
  3. "status": "Completed",
  4. "total_items": 5,
  5. "completed_items": 3,
  6. "failed_items": 2,
  7. "created_on": "2024-12-15T10:30:00Z",
  8. "completed_on": "2024-12-15T10:35:00Z",
  9. "items": [
  10. {
  11. "file_name": "brazil-transcript.pdf",
  12. "status": "Completed",
  13. "report_id": 737271,
  14. "error_message": null
  15. }
  16. ]
  17. }

Status Values

Batch Status

  • Processing
  • Completed
  • Cancelled

Item Status

  • Pending
  • Processing
  • Completed
  • Failed

Example (cURL)

  1. curl -X GET https://www.scholaro.com/appAPI/api/gpa-report/bulk/{batch_id} \
  2. -H "X-API-Key: your_signing_secret_here"

Polling Example (Python)

  1. import requests
  2. import time

  3. url = "https://www.scholaro.com/appAPI/api/gpa-report/bulk"
  4. headers = {"X-API-Key": "your_signing_secret_here"}

  5. # Upload
  6. files = {
  7. 'file': ('bulk-upload.zip', open('/path/to/bulk-upload.zip', 'rb'), 'application/zip')
  8. }
  9. response = requests.post(url, headers=headers, files=files)
  10. batch_id = response.json()['batch_id']

  11. # Poll
  12. while True:
  13. status = requests.get(f"{url}/{batch_id}", headers=headers).json()

  14. completed = status["completed_items"] + status["failed_items"]
  15. print(f"{completed}/{status['total_items']} processed")

  16. if status["status"] != "Processing":
  17. break

  18. time.sleep(10)

SFTP Upload (Automated Integration)

Overview

Instead of using the API, you can upload files via SFTP for automated workflows.


Connection Details

SettingValue
Hostscholaronorthussftp.blob.core.windows.net
Port22
ProtocolSFTP
UsernameProvided by Scholaro
PasswordProvided by Scholaro

Upload Steps

  1. Upload transcript files first
  2. Upload manifest.csv last
  3. Uploading manifest triggers processing

Example (Command Line)

  1. sftp scholaronorthussftp.myuser@scholaronorthussftp.blob.core.windows.net

  2. put brazil-transcript.pdf
  3. put india-transcript.pdf
  4. put manifest.csv

Important Notes

  • Upload transcripts before manifest
  • Manifest triggers processing
  • Do not upload multiple manifests simultaneously
  • Subscription limits apply