NAV
shell ruby python csharp php

ChangeLog

The ChangeLog object

The ChangeLog object looks like this in JSON:

{
    "object": "change_log",
    "id": 946156314,
    "owner_type_id": 8,
    "owner_id": 1862,
    "changed_by_id": 13154473,
    "changed_by_ip": "10.0.0.13",
    "changed_time": "2024-07-08T19:49:36+00:00",
    "type_id": 127,
    "action": "changed",
    "changed_from": "External LMS",
    "changed_to": "Internal LMS",
    "sandbox": true
}
Attribute Required Data Type
id Yes int
owner_type_id Yes int
owner_id Yes int
changed_by_id No int
changed_by_ip Yes text (50)
changed_time Yes datetime
type_id Yes int
action No enum (added, changed, deleted, printed, restored, cloned, requested)
changed_from No text
changed_to No text
sandbox No bool

changelog

Example code to call this method:

curl "https://yourschool.populiweb.com/api2/changelog" \
-H "Content-Type: application/json" \ 
-H "Authorization: Bearer YOUR_POPULI_API_KEY" \ 
-X GET
-d '{
    "filter": []
}' \ 
require 'httparty'
response = HTTParty.get(
 'https://yourschool.populiweb.com/api2/changelog',
 headers: {
  'Authorization' => 'Bearer YOUR_POPULI_API_KEY'
 },
)
puts response.body
import requests
response = requests.get(
 'https://yourschool.populiweb.com/api2/changelog',
 headers={
  'Authorization': 'Bearer YOUR_POPULI_API_KEY'
 },
)
print(response.json())
using Newtonsoft.Json;
using RestSharp;
var client = new RestClient();
var request = new RestRequest(new Uri("https://yourschool.populiweb.com/api2/changelog"), Method.Get);
request.AddHeader("Authorization", "Bearer YOUR_POPULI_API_KEY");
var response = client.Execute(request);
var response_object = JsonConvert.DeserializeObject(response.Content);
Console.Write(response_object);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://yourschool.populiweb.com/api2/changelog');
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer YOUR_POPULI_API_KEY']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($curl);
$response_decoded = json_decode($response);
var_dump($response_decoded);

Example response:

{
    "object": "list",
    "count": 106,
    "results": 106,
    "results_per_page": 200,
    "pages": 1,
    "page": 1,
    "offset": 0,
    "has_more": false,
    "data": [
        {
            "object": "change_log",
            "id": 946156420,
            "owner_type_id": 1,
            "owner_id": 16,
            "changed_by_id": 22,
            "changed_by_ip": "10.0.0.1",
            "changed_time": "2026-07-25T16:24:12+00:00",
            "type_id": 151,
            "action": "added",
            "changed_from": "Cool Kids Plan",
            "changed_to": null,
            "report_data": {
                "changed_time_local": "2026-07-25 09:24:12",
                "owner_type": "PERSON",
                "change_type": "DEFAULT_TUITION_SCHEDULE",
                "changed_by_id": 22,
                "changed_by_name": "API Dude"
            }
        }
    ],
    "sandbox": true
}

Results are limited to changes in the past 30 days.

HTTP Request

GET /changelog

Parameters

Name Required Data Type Description
filter No mixed See available filter conditions
page No int The page of results to return if more than 200 records are found.

Filter Condition Parameters

These conditions can be used to narrow the results returned.

Name Type
changed_by object_id
affected changelog_affected
affected_type choice
type choice
action enum

Permissions

Only keys that have been granted Populi Account Administrator permissions may call this method.

This is a heavy call. For performance reasons, only one heavy call may be made at a time.

Run LMS sync

curl "https://yourschool.populiweb.com/api2/lmssync/run" \
-H "Content-Type: application/json" \ 
-H "Authorization: Bearer YOUR_POPULI_API_KEY" \ 
-X GET
require 'httparty'
response = HTTParty.get(
 'https://yourschool.populiweb.com/api2/lmssync/run',
 headers: {
  'Authorization' => 'Bearer YOUR_POPULI_API_KEY'
 },
)
puts response.body
import requests
response = requests.get(
 'https://yourschool.populiweb.com/api2/lmssync/run',
 headers={
  'Authorization': 'Bearer YOUR_POPULI_API_KEY'
 },
)
print(response.json())
using Newtonsoft.Json;
using RestSharp;
var client = new RestClient();
var request = new RestRequest(new Uri("https://yourschool.populiweb.com/api2/lmssync/run"), Method.Get);
request.AddHeader("Authorization", "Bearer YOUR_POPULI_API_KEY");
var response = client.Execute(request);
var response_object = JsonConvert.DeserializeObject(response.Content);
Console.Write(response_object);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://yourschool.populiweb.com/api2/lmssync/run');
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer YOUR_POPULI_API_KEY']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($curl);
$response_decoded = json_decode($response);
var_dump($response_decoded);

Example response:

{}

Begin a sync operation between Populi and an outside LMS (e.g. Canvas), if you have an integration configured.

HTTP Request

GET /lmssync/run

Parameters

Name Required Data Type Description
direction No enum (from_populi, to_populi, both) Default is both

Permissions

Only keys that have been granted Populi Account Administrator permissions may call this method.

logins

Example code to call this method:

curl "https://yourschool.populiweb.com/api2/logins" \
-H "Content-Type: application/json" \ 
-H "Authorization: Bearer YOUR_POPULI_API_KEY" \ 
-X GET
-d '{
    "filter": []
}' \ 
require 'httparty'
response = HTTParty.get(
 'https://yourschool.populiweb.com/api2/logins',
 headers: {
  'Authorization' => 'Bearer YOUR_POPULI_API_KEY'
 },
)
puts response.body
import requests
response = requests.get(
 'https://yourschool.populiweb.com/api2/logins',
 headers={
  'Authorization': 'Bearer YOUR_POPULI_API_KEY'
 },
)
print(response.json())
using Newtonsoft.Json;
using RestSharp;
var client = new RestClient();
var request = new RestRequest(new Uri("https://yourschool.populiweb.com/api2/logins"), Method.Get);
request.AddHeader("Authorization", "Bearer YOUR_POPULI_API_KEY");
var response = client.Execute(request);
var response_object = JsonConvert.DeserializeObject(response.Content);
Console.Write(response_object);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://yourschool.populiweb.com/api2/logins');
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer YOUR_POPULI_API_KEY']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($curl);
$response_decoded = json_decode($response);
var_dump($response_decoded);

Example response:

{
    "object": "list",
    "count": 0,
    "results": 0,
    "results_per_page": 200,
    "pages": 0,
    "page": 0,
    "offset": 0,
    "has_more": false,
    "data": [],
    "sandbox": true
}

Results are limited to logins in the past 12 months. See user_username field for the User's username. The username field will only have a value for unrecognized failed logins.

HTTP Request

GET /logins

Parameters

Name Required Data Type Description
filter No mixed See available filter conditions
page No int The page of results to return if more than 200 records are found.

Filter Condition Parameters

These conditions can be used to narrow the results returned.

Name Type
user object_id
username text
partial_login bool
outcome enum
fail_reason choice
partial_login_reason choice
type choice
ip_address text

Permissions

Only keys that have been granted Populi Account Administrator permissions may call this method.