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:
All methods use the same underlying processing and produce identical GPA reports.
| Method | Best for |
|---|---|
| API (Single) | Real-time processing, one transcript at a time |
| Bulk API | Batch uploads via ZIP |
| SFTP | Fully automated pipelines and high-volume processing |
To use the API, include your API key in every request.
Header:
- 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
POST
Send data as multipart/form-data.
| Field | Type | Required | Description |
|---|---|---|---|
| country | string | Yes | Country of study |
| file | PDF file | Yes | Transcript file |
| applicant_name | string | No | Applicant name |
| report_name | string | No | Custom report name |
| date_of_birth | string | No | Available if enabled |
| custom_field_1 | string | No | Optional |
| custom_field_2 | string | No | Optional |
| custom_field_3 | string | No | Optional |
- {
- "message": "string",
- "url": "string",
- "gpa_report": {
- "report_id": 123456,
- "applicant_name": "string",
- "report_name": "string",
- "country": "string",
- "institution": "string",
- "total_credits": 0.0,
- "total_points": 0.0,
- "gpa": 0.0,
- "grades": []
- }
- }
- curl -X POST https://www.scholaro.com/appAPI/api/gpa-report/new \
- -H "X-API-Key: your_signing_secret_here" \
- -F "country=India" \
- -F "applicant_name=Jane Smith" \
- -F "report_name=Fall 2024 GPA Report" \
- -F file=@/path/to/transcript.pdf
- using var client = new HttpClient();
- client.DefaultRequestHeaders.Add("X-API-Key", "your_signing_secret_here");
- using var content = new MultipartFormDataContent();
- content.Add(new StringContent("Mexico"), "country");
- content.Add(new StringContent("John Smith"), "applicant_name");
- content.Add(new StringContent("Fall 2024 GPA Report"), "report_name");
- string transcriptPath = "./path/to/transcript.pdf";
- var fileContent = new ByteArrayContent(File.ReadAllBytes(transcriptPath));
- fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
- content.Add(fileContent, "file", "transcript.pdf");
- var response = await client.PostAsync(
- "https://www.scholaro.com/appAPI/api/gpa-report/new",
- content
- );
- import { FormData } from 'formdata-node';
- import { fileFromPath } from 'formdata-node/file-from-path';
- const formData = new FormData();
- formData.append('country', 'Germany');
- formData.append('applicant_name', 'Jack Smith');
- formData.append('report_name', 'Fall 2024 GPA Report');
- const file = await fileFromPath("./path/to/transcript.pdf");
- formData.append('file', file);
- const response = await fetch(
- 'https://www.scholaro.com/appAPI/api/gpa-report/new',
- {
- method: 'POST',
- headers: {
- 'X-API-Key': 'your_signing_secret_here'
- },
- body: formData
- }
- );
- import requests
- url = "https://www.scholaro.com/appAPI/api/gpa-report/new"
- headers = {
- "X-API-Key": "your_signing_secret_here"
- }
- files = {
- 'file': ('transcript.pdf', open('/path/to/transcript.pdf', 'rb'), 'application/pdf')
- }
- data = {
- 'country': 'Brazil',
- 'applicant_name': 'Jane Smith',
- 'report_name': 'Fall 2024 GPA Report'
- }
- response = requests.post(url, headers=headers, files=files, data=data)
- result = response.json()
Requirement:
The transcript file must be a valid PDF.
Access:
This API is available only to institutional Premium users.
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.
POST
Send multipart/form-data with a single file:
- file: bulk-upload.zip
.zip file
manifest.csv
Each row represents one report:
- file_name,country,applicant_name,report_name,date_of_birth,custom_field_1,custom_field_2,custom_field_3
- brazil-transcript.pdf,Brazil,Jane Smith,Fall 2024 Report,01/15/1995,Field1,Field2,Field3
- india-transcript.pdf,India,John Doe,Spring 2024 Report,,,,
| Field | Required | Description |
|---|---|---|
| file_name | Yes | Name of transcript file in ZIP |
| country | Yes | Country for GPA conversion |
| applicant_name | No | Extracted automatically if empty |
| report_name | No | Custom report name |
| date_of_birth | No | If enabled |
| custom_field_1-3 | No | Optional fields |
- {
- "batch_id": "5797602d-f05f-495b-8cb9-220c8e2c5df5",
- "total_items": 5,
- "status_url": "/api/gpa-report/bulk/{batch_id}"
- }
- curl -X POST https://www.scholaro.com/appAPI/api/gpa-report/bulk \
- -H "X-API-Key: your_signing_secret_here" \
- -F file=@/path/to/bulk-upload.zip
| Status | Description |
|---|---|
| 400 | Invalid request (missing ZIP, manifest, files, or limits exceeded) |
| 401 | Unauthorized (invalid API key) |
GET
- {
- "batch_id": "5797602d-f05f-495b-8cb9-220c8e2c5df5",
- "status": "Completed",
- "total_items": 5,
- "completed_items": 3,
- "failed_items": 2,
- "created_on": "2024-12-15T10:30:00Z",
- "completed_on": "2024-12-15T10:35:00Z",
- "items": [
- {
- "file_name": "brazil-transcript.pdf",
- "status": "Completed",
- "report_id": 737271,
- "error_message": null
- }
- ]
- }
Batch Status
Item Status
- curl -X GET https://www.scholaro.com/appAPI/api/gpa-report/bulk/{batch_id} \
- -H "X-API-Key: your_signing_secret_here"
- import requests
- import time
- url = "https://www.scholaro.com/appAPI/api/gpa-report/bulk"
- headers = {"X-API-Key": "your_signing_secret_here"}
- # Upload
- files = {
- 'file': ('bulk-upload.zip', open('/path/to/bulk-upload.zip', 'rb'), 'application/zip')
- }
- response = requests.post(url, headers=headers, files=files)
- batch_id = response.json()['batch_id']
- # Poll
- while True:
- status = requests.get(f"{url}/{batch_id}", headers=headers).json()
- completed = status["completed_items"] + status["failed_items"]
- print(f"{completed}/{status['total_items']} processed")
- if status["status"] != "Processing":
- break
- time.sleep(10)
Instead of using the API, you can upload files via SFTP for automated workflows.
| Setting | Value |
|---|---|
| Host | scholaronorthussftp.blob.core.windows.net |
| Port | 22 |
| Protocol | SFTP |
| Username | Provided by Scholaro |
| Password | Provided by Scholaro |
manifest.csv last
- sftp scholaronorthussftp.myuser@scholaronorthussftp.blob.core.windows.net
- put brazil-transcript.pdf
- put india-transcript.pdf
- put manifest.csv