Coach Reporting
Retrieve learning analytics from Showpad Coach, including statistics for Courses, Paths (formerly Checklists), Curricula, and user progress. This is the same data available on the Coach Reports page in the Admin App.
- List report objects? Use
GET /objects - Describe fields? Use
GET /objects/{objectId}/describe - Query results? Use
GET /objects/{objectId}?parameters=... - Parameters are passed as Base64-encoded JSON in the query string
When to use the API
| LMS Integration | Training Analytics | Compliance Tracking | Performance Dashboards |
|---|---|---|---|
| Sync course completion data with your learning management system. | Analyze training engagement and identify knowledge gaps. | Track certification status and ensure compliance requirements are met. | Build custom dashboards showing team learning progress. |
- Plan: Showpad Coach license
- Permissions: Admin or Manager role with access to Coach Reports
- Authentication: Valid OAuth 2.0 access token (learn more)
What you'll learn
- How to list available report objects
- How to describe fields in an object
- How to query results with filters and pagination
- Available filter operators
See the Report Definitions page for complete field documentation for all objects.
Requests
Base Endpoint
The base endpoint is:
https://{{subdomain}}.showpad.biz/api/learn/reporting/v3/json
Every request needs to be prefixed with the base endpoint.
You can make the following requests with the base endpoint:
| HTTP Request | Description |
|---|---|
GET /objects | List all possible objects. |
GET /objects/{objectId}/describe | Describe fields and data types within an object. |
GET /objects/{objectId} | Receive paginated object results from a query. |
Object
Do not supply request parameters with this method.
To retrieve a list of all possible objects:
- cURL
- JavaScript
- Python
curl -X GET "https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects" \
-H "Authorization: Bearer {access_token}"
const response = await fetch('https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects', {
method: 'GET',
headers: {
Authorization: 'Bearer {access_token}',
},
});
const data = await response.json();
console.log(data);
import requests
url = "https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects"
headers = {"Authorization": "Bearer {access_token}"}
response = requests.get(url, headers=headers)
print(response.json())
A successful request returns 200 OK with an Object response:
{
"objects": [
{
"id": "string",
"displayName": "string",
"urls": {
"describe": "string",
"object": "string"
}
}
]
}
| Property Name | Value | Description |
|---|---|---|
objects | list | List of available report types. |
objects[].id | string | The API identifier of the object. |
objects[].displayName | string | The display name of the object. |
objects[].urls.describe | string | The path of the URL to describe the object's fields. |
Describe
Do not supply request parameters with this method.
To retrieve the field descriptions and data types within an object:
- cURL
- JavaScript
- Python
curl -X GET "https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/{objectId}/describe" \
-H "Authorization: Bearer {access_token}"
const response = await fetch(
'https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/{objectId}/describe',
{
method: 'GET',
headers: {
Authorization: 'Bearer {access_token}',
},
}
);
const data = await response.json();
console.log(data);
import requests
url = "https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/{objectId}/describe"
headers = {"Authorization": "Bearer {access_token}"}
response = requests.get(url, headers=headers)
print(response.json())
A successful request returns 200 OK with a Describe response:
{
"fields": [
{
"id": "string",
"displayName": "string",
"type": "string",
"options": ["string"]
}
]
}
| Property Name | Value | Description |
|---|---|---|
fields | list | List of available fields for the chosen object. See Report Definitions for details about all objects and their available fields. |
fields[].id | string | The API identifier of the field. |
fields[].displayName | string | The display name of the field. |
fields[].type | string | They type of value that is stored in the field. Possible values are: int, picklist, string, float, percent, and date. |
fields[].options | list | The options that are available for picklists. |
Result
- cURL
- JavaScript
- Python
curl -X GET "https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/{objectId}?parameters={base64_params}" \
-H "Authorization: Bearer {access_token}"
const response = await fetch(
'https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/{objectId}?parameters={base64_params}',
{
method: 'GET',
headers: {
Authorization: 'Bearer {access_token}',
},
}
);
const data = await response.json();
console.log(data);
import requests
url = "https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/{objectId}"
params = {"parameters": "{base64_params}"}
headers = {"Authorization": "Bearer {access_token}"}
response = requests.get(url, params=params, headers=headers)
print(response.json())
Request Parameters
| Parameter Name | Value | Description |
|---|---|---|
parameters | string | Base64 encoded JSON representing requesting parameters. |
Parameter creation for results request
Any requests made without specific parameters will be set to the default values. Once the parameters are set, encode the
JSON to base64 and pass it as the value for parameters in the request query string.
Operators
| Operator | Description | Available Field Types | # of Values |
|---|---|---|---|
eq | Equal to | string, int, float, percent, date | 1 |
ne | Not equal to | string, int, float, percent, date | 1 |
co | Contains | string | 1 |
bw | Begins with | string | 1 |
nc | Not contains | string | 1 |
in | In | picklist | At least 1 |
lt | Less than | int, float, percent, date | 1 |
le | Less than or equal to | int, float, percent, date | 1 |
gt | Greater than | int, float, percent, date | 1 |
ge | Greater than or equal to | int, float, percent, date | 1 |
be | Between | int, float, percent, date | 2 |
nb | Not between | int, float, percent, date | 2 |
Example Request
The parameters below will return the first 100 curriculums with the title "Example Curriculum", sorted by Curriculum Title ascending.
Compressed and Base64-encoded, the above JSON produces:
ewogInBhZ2UiOiAxLAogInJlc3VsdHNQZXJQYWdlIjogMTAwLAogImZpbHRlcnMiOiBbCiB7CiAgICJmaWVsZCIgOiAgImN1cnJpY3VsdW1UaXRsZSIsCiAgICJvcGVyYXRvciIgOiAiZXEiLAogICAidmFsdWVzIjogWwogICAiRXhhbXBsZSBDdXJyaWN1bHVtIgogICBdCiAgfQogXSwKICJmaWVsZHMiOiBbCiAiY3VycmljdWx1bVRpdGxlIiwKICJjb3Vyc2VDb3VudCIsCiAidXNlckNvdW50IiwKICJzdGFydENvdW50IiwKICJzdGFydFBlcmNlbnRhZ2UiLAogInRlc3RBdmVyYWdlIiwKICJwaXRjaEF2ZXJhZ2UiCiAgXSwKICAic29ydCI6IHsKICAiZmllbGQiOiAiY3VycmljdWx1bVRpdGxlIiwKICAiZGlyZWN0aW9uIjogImFzYyIKICB9CiB9
Pass this Base64 string as the value for parameters in the query string:
- cURL
- JavaScript
- Python
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
"https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/Curriculum?parameters=ewogInBhZ2UiOiAxLAogInJlc3VsdHNQZXJQYWdlIjogMTAwLAogImZpbHRlcnMiOiBbCiB7CiAgICJmaWVsZCIgOiAgImN1cnJpY3VsdW1UaXRsZSIsCiAgICJvcGVyYXRvciIgOiAiZXEiLAogICAidmFsdWVzIjogWwogICAiRXhhbXBsZSBDdXJyaWN1bHVtIgogICBdCiAgfQogXSwKICJmaWVsZHMiOiBbCiAiY3VycmljdWx1bVRpdGxlIiwKICJjb3Vyc2VDb3VudCIsCiAidXNlckNvdW50IiwKICJzdGFydENvdW50IiwKICJzdGFydFBlcmNlbnRhZ2UiLAogInRlc3RBdmVyYWdlIiwKICJwaXRjaEF2ZXJhZ2UiCiAgXSwKICAic29ydCI6IHsKICAiZmllbGQiOiAiY3VycmljdWx1bVRpdGxlIiwKICAiZGlyZWN0aW9uIjogImFzYyIKICB9CiB9"
const params = btoa(
JSON.stringify({
page: 1,
resultsPerPage: 100,
filters: [{ field: 'curriculumTitle', operator: 'eq', values: ['Example Curriculum'] }],
fields: [
'curriculumTitle',
'courseCount',
'userCount',
'startCount',
'startPercentage',
'testAverage',
'pitchAverage',
],
sort: { field: 'curriculumTitle', direction: 'asc' },
})
);
const response = await fetch(
`https://{subdomain}.showpad.biz/api/learn/reporting/v3/json/objects/Curriculum?parameters=${params}`,
{
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
},
}
);
const data = await response.json();
console.log(data);
import requests
import base64
import json
params_json = json.dumps({
"page": 1,
"resultsPerPage": 100,
"filters": [{"field": "curriculumTitle", "operator": "eq", "values": ["Example Curriculum"]}],
"fields": ["curriculumTitle", "courseCount", "userCount", "startCount", "startPercentage", "testAverage", "pitchAverage"],
"sort": {"field": "curriculumTitle", "direction": "asc"}
})
params_b64 = base64.b64encode(params_json.encode()).decode()
url = f"https://{{subdomain}}.showpad.biz/api/learn/reporting/v3/json/objects/Curriculum"
headers = {"Authorization": "Bearer YOUR_ACCESS_TOKEN"}
response = requests.get(url, params={"parameters": params_b64}, headers=headers)
print(response.json())
Next steps
- Report Definitions - Complete field documentation for all 19 Coach Reporting objects
Was this page helpful?