Reminders

API Reference

Introduction

Welcome to the IGLOO API Reference! You can use our API client to access Igloo API endpoints, which can be used to view and manipulate various data sources inside the platform. We have language bindings in Javascript, and code examples are viewable on the right-hand side.

Native API client

Before you begin, you should read the Overview of the Igloo API. The Native API client is an extension of mooTools Class:Request.

Options


 
apibaseurlA string to use as the base URI for the API request, defaults to the current HTTP schema and hostname (document.location.protocol + '//' + document.location.host) Example URI: http://www.mycommunity.com
apipathRequired for specific Igloo API endpoints that don't follow the standard URL format
apimethodThe relative path from apibaseurl to append to the URI. Example URI: http://www.mycommunity.com/**my/path**/
headersAn object containing one or more header. Default is 'accept': 'application/json'. For example: headers: { accept: 'application/json' }
methodThe HTTP method to use. Default is POST
postdataThe post body to provide with the request (if supported by the HTTP method.) This maps to the request base method data. For example: postdata: { user: 'Tex', age: 39 }
queryparamsAn object with key/value pairs that are stringified using mooTools Object.toQueryString into a query string. For example: { user: 'Tex', age: 39 }
sendimmediatelyBoolean that allows an APIClient to be created but not sent immediately. If set to 'false' you must use .send() once the request is ready.

GUIDs

The Igloo platform uses a GUID (referenced as {guid} in all code examples) to identify and target each unique instance of our proprietary applications that have been deployed inside your Igloo. In addition, pages, spaces, navigation items, and each individual file will have their own GUID as well.

Most of our API endpoints require passing a {guid} to access, target, and manipulate data.

You may obtain the GUID you're looking for by querying the DOM using your favorite browser developer tools

Channels

The containers that hold instances of our proprietary applications (such as Blogs, Calendars, Wikis, etc) are sometimes referred to as "channels" in Igloo nomenclature. Please keep that in mind to avoid confusion when working with our API endpoints.

// Basic API client usage
var basicClient = new ApiClient({
 apimethod: 'milestones/view',
 method: 'get',
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});





// Advanced API client usage
var advancedClient = new ApiClient({
 apimethod: 'milestones/create',
 method: 'post',
 sendimmediately: false,
 postdata: {
 pointsNeeded: '1000',
 pointsRewarded: '250',
 title: 'Customer Success Hero',
 badgeIndex: 1
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log('API Request Success!', result);
 },
 onFailure: function (xhr) {
 console.log('API Request Failed!', xhr.status);
 }
});
advancedClient.send();

Errors

The Igloo API uses the following error codes:


 
400Bad Request
401Unauthorized
403Forbidden
404Not Found
409Conflict
416Range Not Satisfiable
422Unprocessable Entity
500Internal Error
502Bad Gateway
503Service Unavailable
504Gateway Timeout

Authentication

Authentication is only required if you are trying to connect to Igloo from a 3rd-party service or application. Otherwise, all API calls will be fully authenticated by the active browser session, and will respect the permissions assigned to the currently logged in user.

To create a session, you must provide the following data encoded as a form submission (x-www-form-urlencoded) as part of the request body:


 
appIdAPI key provided by Igloo Software.
appPassRandomly generated password provided by Igloo Software.
usernameIgloo community user to log in as (always an email address.)
passwordPassword that corresponds to username.
communityURL of the Igloo community to log in to.
apiversionUse version 1 of the Igloo API.

Contact Developer Support to obtain an appId and appPass.

// External authentication using Node.js with the superagent package
const request = require('superagent');

// your issued Igloo API credentials
let credentials = {
 appId: "000df22c-ece6-4484-a00b-4dc2200eca31",
 appPass: "a-secure-api-password",
 username: "your-user-login@domain.com",
 password: "password",
 community: 'mycommunity.igloocommunities.com'
};

request
 .post('https://mycommunity.igloocommunities.com/.api/api.svc/session/create')
 .set('Accept', 'application/json')
 .set('Content-Type', 'application/x-www-form-urlencoded')
 .send(`appId=${credentials.appId}&appPass=${credentials.appPass}&username=${credentials.username}&password=${credentials.password}&community=${credentials.community}&apiversion=1`)
 .end(function (err, res) {
 if (err || !res.ok) {
 console.error('Unable to create session', err);
 } else {
 console.info('Here is your igloo session data:', res.body);
 console.info('Your iglooauth session key is:', res.body.response.sessionKey);
 }
 });

Blogs

The Igloo API has the following endpoints to work with blogs:

View a channel

URI: blogchannels/{guid}/view

{guid}: The blog channel to view.

Return all of the properties of a specified blog channel.

QueryparamsValue
maxcountSpecify the maximum number of objects to return.
startindexSupply an integer value to specify where in the index to start returning blog articles.
includefuturepublishedSet to false by default. Set to True to include articles to be published at a future date in the index.
new ApiClient({
 apimethod: 'blogchannels/{guid}/view',
 method: 'get',
 queryparams: {
 maxcount: 25,
 startindex: 10,
 includefuturepublished: false
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create an article

URI: blogarticles/{guid}/add

{guid}: The blog channel to create the article in.

Create a blog article in the specified blog channel.

PostdataValue
nameThe title of the new blog article. This is a required field.
summaryThe text that will be contained in the description field of the new blog article.
bodyThe content of the new blog article.
activationDateThe date and time when the blog article will appear to users. ISO 8601 compliant, specifically the combined date and time in UTC: 2016-08-09T15:48:19+00:00
new ApiClient({
 apimethod: 'blogarticles/{guid}/add',
 method: 'post',
 postdata: {
 name: 'Jabberwocky',
 summary: 'This is a nonsense poem written by Lewis Carroll in 1871.',
 body: 'Twas brillig, and the slithy toves, Did gyre and gimble in the wabe, All mimsy were the borogoves, And the mome raths outgrabe.',
 activationDate: '2016-11-11T15:48:19+00:00'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Update an article

URI: blogarticles/{guid}/update

{guid}: The blog article to update.

Update a blog article in the specified blog channel.

PostdataValue
nameThe title of the new blog article. This is a required field.
summaryThe text that will be contained in the description field of the new blog article.
bodyUpdated body of the blog article.
activationDateThe date and time when the blog article will appear to users. ISO 8601 compliant, specifically the combined date and time in UTC: 2016-08-09T15:48:19+00:00
new ApiClient({
 apimethod: 'blogarticles/{guid}/update',
 method: 'post',
 postdata: {
 summary: 'This is a nonsense poem written by Lewis Carroll in 1871.',
 body: 'Twas brillig, and the slithy toves, Did gyre and gimble in the wabe, All mimsy were the borogoves, And the mome raths outgrabe.',
 activationDate: '2016-11-11T15:48:19+00:00'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Bulk User Actions

The Igloo API has the following endpoints to perform bulk user actions:

Bulk member upload

URI: bulk_user_action/create_job

Batch creation of user accounts inside an Igloo from CSV data.

PostdataValue
csvDataThe comma-separated value list of users to add to the community.
titleUnique title for the bulk action.
typeType of bulk action to make.
groupDelimiterDelimiter to separate the Groups to add the user accounts to.
spaceDelimiterDelimiter to separate the Spaces t o add the user accounts to.
// String containing the minimum required user data in a comma-separated value list
var csvData = 'firstname,lastname,email,password
Tex,Murphy,tmurphy@igloosoftware.com,password
Henry,Stauf,hstauf@igloosoftware.com,password';

new ApiClient({
 apimethod: 'bulk_user_action/create_job',
 method: 'post',
 postdata: {
 csvData: csvData,
 title: 'New bulk member upload job',
 type: 'update',
 groupDelimiter: '|',
 spaceDelimiter: '~'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Bulk member revoke

URI: bulk_user_action/create_job

Batch deletion of user accounts in an Igloo from CSV data.

PostdataValue
csvDataThe comma-separated value list of users to add to the community.
titleUnique title for the bulk action.
typeType of bulk action to make.
groupDelimiterDelimiter to separate the Groups to add the user accounts to.
spaceDelimiterDelimiter to separate the Spaces t o add the user accounts to.
// String containing the minimum required user data in a comma-separated value list
var csvData = 'email
tmurphy@igloosoftware.com
hstauf@igloosoftware.com';

new ApiClient({
 apimethod: 'bulk_user_action/create_job',
 method: 'post',
 postdata: {
 csvData: csvData,
 title: 'New bulk member revoke job',
 type: 'delete',
 groupDelimiter: '|',
 spaceDelimiter: '~'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Calendars

The Igloo API has the following endpoints to work with calendars:

View events

URI: calendar/{guid}/view

{guid}: The calendar to view events from.

Return a list of all the calendar events.

QueryparamsValue
maxcountSpecify the maximum number of objects to return.
subscribedOnlySet to false by default.
startDateCalendar events from before this date will not be returned. ISO 8601 compliant, specifically the combined date and time in UTC: 2016-09-09T00:00:00+00:00
endDateCalendar events after this date will not be returned. ISO 8601 compliant, specifically the combined date and time in UTC: 2016-09-09T00:00:00+00:00
startItemSupply an integer value to specify where in the index to start returning calendar events.
new ApiClient({
 apimethod: 'calendar/{guid}/view',
 method: 'get',
 queryparams: {
 maxcount: 25,
 subscribedOnly: false,
 startDate: '2016-09-09T00:00:00+00:00',
 endDate: '2016-11-11T00:00:00+00:00',
 startItem: 10
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View upcoming events

URI: calendar/{guid}/viewUpcoming

{guid}: The calendar to view upcoming events from.

Return a list of all the upcoming calendar events.

QueryparamsValue
maxEventsSpecify the maximum number of objects to return.
subscribedOnlySet to false by default.
startDateCalendar events from before this date will not be returned. ISO 8601 compliant, specifically the combined date and time in UTC: 2016-09-09T00:00:00+00:00
includeOngoingSet to false by default.
new ApiClient({
 apimethod: 'calendar/{guid}/viewUpcoming',
 method: 'get',
 queryparams: {
 maxEvents: 25,
 subscribedOnly: false,
 startDate: '2016-09-09T00:00:00+00:00',
 includeOngoing: false
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a calendar

URI: calendar/{guid}/create

{guid}: The page or space to create the calendar under.

Create a calendar that will contain calendar events.

Inspect the DOM elements while viewing the Site Manager to obtain the GUID of a page or space

PostdataValue
titleString value containing the title of the calendar to create.
returnNavBoolean value that will take you directly to the newly created calendar if set to true.
showInNavBoolean value to toggle whether or not this calendar will be hidden in the navigation or not.
new ApiClient({
 apimethod: 'calendar/{guid}/create',
 method: 'post',
 postdata: {
 title: 'Sales Calendar',
 returnNav: false,
 showInNav: true
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a calendar event

URI: calendar/{guid}/calendarevents/add

{guid}: The calendar to create the event/appointment inside of.

Create a calendar event/appointment.

PostdataValue
title_enString value containing the title of the calendar event to create.
descriptionString value containing the summary of the calendar event to create.
startDateThe starting date and time of the calendar event. ISO 8601 compliant, specifically the combined date and time in UTC: 2016-09-09T14:30:00+00:00
endDateThe ending date and time of the calendar event. ISO 8601 compliant, specifically the combined date and time in UTC: 2016-09-09T15:00:00+00:00
locationString value used to reserve the meeting room.
enableJoinBoolean value to toggle whether or not recipients can invite additional attendees.
recipient_add_organizerBoolean value, false by default.
recipient_idsComma-delimited list of string values containing the desired attendees of the calendar event.
recipient_ids_isOptionalComma-delimited list of string values, that maps to the above option, used to indicate which attendees to the meeting are optional.
new ApiClient({
 apimethod: 'calendar/{guid}/calendarevents/add ',
 method: 'post',
 postdata: {
 title_en: 'Client Consult Call',
 description: 'Meeting with the client to update them on project status',
 content: 'The agenda consists of the following: Lorem ipsum',
 startDate: '2016-09-09T14:30:00+00:00',
 endDate: '2016-09-09T15:00:00+00:00',
 location: 'Board Room',
 enableJoin: true,
 recipient_add_organizer: true,
 recipient_ids: 'Tex Murphy, Chelsee Bando, Louie Lamintz',
 recipient_ids_isOptional: 'false, false, false'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Folders

The Igloo API has the following endpoints to work with folders:

View folder information

URI: folders/{guid}/view

{guid}: The folder to retrieve information from.

View information about a folder.

new ApiClient({
 apimethod: 'folders/{guid}/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View folder contents

URI: folders/{guid}/children/view

{guid}: The folder to retrieve child objects from.

Returns a list of all folders and files inside the specified folder.

Inspect the DOM elements while viewing the Site Manager to obtain the GUID of a folder

QueryparamsValue
maxcountSpecify the maximum number of objects to return.
startindexSupply an integer value to specify where in the index to start returning blog articles.
includefuturepublishedSet to false by default. Set to True to include articles to be published at a future date in the index.
new ApiClient({
 apimethod: 'folders/{guid}/children/view',
 method: 'get',
 queryparams: {
 maxcount: 25,
 startindex: 10,
 includefuturepublished: false
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a folder

URI: folders/create

{guid}: The folder to create the new folder in.

Create a new folder inside a pre-existing folder.

PostdataValue
parentId{guid} of the folder to create the new folder inside of.
titleString value containing the title of the new folder to create.
new ApiClient({
 apimethod: 'folders/create',
 method: 'post',
 queryparams: {
 parentId: '{guid}',
 title: 'New Folder'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Files

The Igloo API has endpoints to work with file data. It is necessary to chain the required API calls in the correct order due to the asynchronous nature of JavaScript. Our platform supports chunking/slicing of files, and the logic for that has been included in this code example. For more detailed information, please refer to our Developer Knowledge Base.

In this example we are simply creating a flat text file in memory to use as our file object.

// Instantiate a file in memory that contains the text "Hello, World!"
var file = new File(["Hello, World!"], "filename.txt", {
 type: "text/plain"
});

// Variables that will need to be accessible by each call
var fileId = null,
 folderGuid = 'abcdefgh-ijkl-mnop-qrst-uvwxyz012345',
 chunkIdx = 0,
 chunkSize = null;

Upload a new file

URI: file_upload/create

{guid}: The folder to upload the file into.

This first step intiliazes the file upload process. The diagram below illustrates the data flow of the four API calls and data chunking/slicing required to upload a file.

PostdataValue
titleName of the file.
totalBytesSize (in bytes) of the file object, as reported by the browser File API.
documentId{guid} of the folder to upload the file into.

After this call is complete, the function to start Step 2 is called.

// Step 1 - Initialize the file upload process
new ApiClient({
 apimethod: 'file_upload/create',
 method: 'post',
 postdata: {
 title: file.name,
 totalBytes: file.size,
 documentId: folderGuid
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);

 fileId = result.response.id;
 chunkSize = result.response.ChunkSize;

 // Call the function to start Step 2, and pass in the chunkSize
 uploadChunks(chunkSize)
 }
});

Upload file chunks

URI: file_upload/ + fileId + /add_chunk

fileId: The file upload ID number generated by the Igloo platform in Step 1, passed as a variable into the URI.

The second step processes the file upload and file slices/chunks (if applicable.) The API call during this step is not sent immediately, and returns a requestUrl that is required to post the actual file data.

QueryparamsValue
chunkIndexInteger value returned from the Igloo platform in Step 1, passed as a variable.

Next, this function performs file slicing/chunking logic, and then prepares the chunk itself.

chunkRequest

The following header information is supplied in the chunkRequest:

HeaderValue
Cache-ControlSet to no-cache. This forces cache to submit the request to the origin server for validation before releasing a cached copy.
X-Requested-WithXMLHttpRequest - Using the XMLHttpRequest API.
X-File-NameencodeURIComponent(file.name) - Encodes the file name for the URL.
X-File-Sizefile.size - Size (in bytes) of the file object.
X-File-IdfileId - File ID number generated by the Igloo platform in Step 1.
X-File-ResumeBoolean value, usually set to true.
Acceptapplication/json - Instructs the client content will be in JSON format.

After this request is sent, the next function is called to proceed to Step 3 of the file upload process.

// Step 2 - Upload file chunk(s)
function uploadChunks(chunkSize) {
 var apiClient = new ApiClient({
 sendimmediately: false,
 apimethod: 'file_upload/' + fileId + '/add_chunk',
 apipath: '/.file_upload_api/',
 method: 'post',
 urlEncoded: false,
 emulation: false,
 queryparams: {
 chunkIndex: chunkIdx
 }
 });

 // Get Request URL
 var requestUrl = apiClient.getRequestUrl();

 // Chunk handling
 var start = chunkIdx * chunkSize,
 end = chunkSize,
 total = start + end;

 if (total > file.size) {
 end = total - file.size;
 }

 var chunk = file.slice(start, total);

 // Create the request
 var chunkRequest = new Request({
 url: requestUrl,
 urlEncoded: false,
 noCache: true,
 headers: {
 'Cache-Control': 'no-cache',
 'X-Requested-With': 'XMLHttpRequest',
 'X-File-Name': encodeURIComponent(file.name),
 'X-File-Size': file.size,
 'X-File-Id': fileId,
 'X-File-Resume': 'true',
 'Accept': 'application/json'
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);

 // Call the function to start Step 3
 updateDocument();
 },
 onProgress: function (e) {
 var progress = parseInt(e.loaded) + (parseInt(chunkIdx) * parseInt(chunkSize));
 progress = progress / file.size * 100;
 }
 });

 // Send the actual chunk request
 chunkRequest.sendBlob(chunk);
}

Update the file upload job

URI: file_upload/ + fileId + /update

fileId: The file upload ID number generated by the Igloo platform in Step 1, passed as a variable into the URI.

The third step updates the file upload job that was created on the Igloo platform in Step 1.

PostdataValue
titleThe name of the file
descriptionOptional description field containing string data.
labelOptional label field containing string data.
parentId{guid} of the folder to upload the file into.

After this call is complete, the function to start Step 4 is called.

// Step 3 - Update the file upload job on the platform
function updateDocument() {
 var apiClient = new ApiClient({
 apimethod: 'file_upload/' + fileId + '/update',
 method: 'post',
 postdata: {
 title: file.name,
 description: '',
 label: '',
 parentId: folderGuid
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);

 // Call the function to start Step 4
 createDocument();
 }
 });
}

Publish the new file

URI: file_upload/ + fileId + /create_document

fileId: The file upload ID number generated by the Igloo platform in Step 1, passed as a variable into the URI.

The fourth and final step publishes the file to the specified folder.

QueryparamsValue
updateLastSignificantVersionBoolean value, set to false because it's a new file.
// Step 4 - Publish the new file
function createDocument() {
 var apiClient = new ApiClient({
 apimethod: 'file_upload/' + fileId + '/create_document',
 method: 'post',
 queryparams: {
 updateLastSignificantVersion: false
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);
 }
 });
}

Update an existing file

URI: file_upload/create

{guid}: The file to update with a new version.

This first step intiliazes the file upload process. The diagram below illustrates the data flow of the four API calls and data chunking/slicing required to upload a new version of a file.

PostdataValue
titleName of the file.
totalBytesSize (in bytes) of the file object, as reported by the browser File API.
documentId{guid} of the existing file to update. The platform supports version control, and will automatically increment the version when the upload is complete.

After this call is complete, the function to start Step 2 is called.

// Instantiate a file in memory that contains the text "Hello, World!"
var file = new File(["Hello, World!"], "filename.txt", {
 type: "text/plain"
});

// Variables that will need to be accessible by each call
var fileId = null,
 objGuid = 'abcdefgh-ijkl-mnop-qrst-uvwxyz012345',
 chunkIdx = 0,
 chunkSize = null;

// Step 1 - Initialize the file upload process
new ApiClient({
 apimethod: 'file_upload/create',
 method: 'post',
 postdata: {
 title: file.name,
 totalBytes: file.size,
 documentId: objGuid
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);

 fileId = result.response.id;
 chunkSize = result.response.ChunkSize;

 // Call the function to start Step 2, and pass in the chunkSize
 uploadChunks(chunkSize)
 }
});

Upload file chunks

URI: file_upload/ + fileId + /add_chunk

fileId: The file upload ID number generated by the Igloo platform in Step 1, passed as a variable into the URI.

The second step processes the file upload and file slices/chunks (if applicable.) The API call during this step is not sent immediately, and returns a requestUrl that is required to post the actual file data.

QueryparamsValue
chunkIndexInteger value returned from the Igloo platform in Step 1, passed as a variable.

Next, this function performs file slicing/chunking logic, and then prepares the chunk itself.

chunkRequest

The following header information is supplied in the chunkRequest:

HeaderValue
Cache-ControlSet to no-cache. This forces cache to submit the request to the origin server for validation before releasing a cached copy.
X-Requested-WithXMLHttpRequest - Using the XMLHttpRequest API.
X-File-NameencodeURIComponent(file.name) - Encodes the file name for the URL.
X-File-Sizefile.size - Size (in bytes) of the file object.
X-File-IdfileId - File ID number generated by the Igloo platform in Step 1.
X-File-ResumeBoolean value, usually set to true.
Acceptapplication/json - Instructs the client content will be in JSON format.

After this request is sent, the next function is called to proceed to Step 3 of the file upload process.

// Step 2 - Upload file chunk(s)
function uploadChunks(chunkSize) {
 var apiClient = new ApiClient({
 sendimmediately: false,
 apimethod: 'file_upload/' + fileId + '/add_chunk',
 apipath: '/.file_upload_api/',
 method: 'post',
 urlEncoded: false,
 emulation: false,
 queryparams: {
 chunkIndex: chunkIdx
 }
 });

 // Get Request URL
 var requestUrl = apiClient.getRequestUrl();

 // Chunk handling
 var start = chunkIdx * chunkSize,
 end = chunkSize,
 total = start + end;

 if (total > file.size) {
 end = total - file.size;
 }

 var chunk = file.slice(start, total);

 // Create the request
 var chunkRequest = new Request({
 url: requestUrl,
 urlEncoded: false,
 noCache: true,
 headers: {
 'Cache-Control': 'no-cache',
 'X-Requested-With': 'XMLHttpRequest',
 'X-File-Name': encodeURIComponent(file.name),
 'X-File-Size': file.size,
 'X-File-Id': fileId,
 'X-File-Resume': 'true',
 'Accept': 'application/json'
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);

 // Call the function to start Step 3
 updateDocument();
 },
 onProgress: function (e) {
 var progress = parseInt(e.loaded) + (parseInt(chunkIdx) * parseInt(chunkSize));
 progress = progress / file.size * 100;
 }
 });

 // Send the actual chunk request
 chunkRequest.sendBlob(chunk);
}

Update the file upload job

URI: file_upload/ + fileId + /update

fileId: The file upload ID number generated by the Igloo platform in Step 1, passed as a variable into the URI.

The third step updates the file upload job that was created on the Igloo platform in Step 1.

PostdataValue
titleThe name of the file
descriptionOptional description field containing string data.
labelOptional label field containing string data.
documentId{guid} of the existing file to update. The platform supports version control, and will automatically increment the version when the upload is complete.

After this call is complete, the function to start Step 4 is called.

// Step 3 - Update the file upload job on the platform
function updateDocument() {
 var apiClient = new ApiClient({
 apimethod: 'file_upload/' + fileId + '/update',
 method: 'post',
 postdata: {
 title: file.name,
 description: '',
 label: '',
 documentId: objGuid
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);

 // Publish the new version
 addDocumentVersion();
 }
 });
}

Publish the updated file

URI: file_upload/ + fileId + /add_document_version

fileId: The file upload ID number generated by the Igloo platform in Step 1, passed as a variable into the URI.

The fourth and final step publishes the file to the specified folder.

QueryparamsValue
updateLastSignificantVersionBoolean value, set to false but the file version will be incremented by the platform.
// Step 4 - Publish the new file
function addDocumentVersion() {
 var apiClient = new ApiClient({
 apimethod: 'file_upload/' + fileId + '/add_document_version',
 method: 'post',
 queryparams: {
 updateLastSignificantVersion: false
 },
 onSuccess: function (responseText, responseXML) {
 var result = JSON.parse(responseText);
 console.log(result);
 }
 });
}

Forums

The Igloo API has the following endpoints to work with forums:

View a forum

URI: forumchannels/{guid}/view

{guid}: The forum to view

View a forum channel.

new ApiClient({
 apimethod: 'forumchannels/{guid}/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Update a forum

URI: forumchannels/{guid}/update

{guid}: The forum to be updated

Updates a forum channel.

PostdataValue
titleThe title of the forum.
descriptionDescription text associated with the forum channel.
new ApiClient({
 apimethod: 'forumchannels/{guid}/update',
 method: 'post',
 postdata: {
 title: 'Sales Questions',
 description: 'This is a forum to post questions to the Sales department.'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View a forum post

URI: forumchannels/{guid}/forumtopics/view

{guid}: The forum to view

View a forum post.

new ApiClient({
 apimethod: 'forumchannels/{guid}/forumtopics/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a forum post

URI: forumchannels/{guid}/forumtopics/add

{guid}: The forum to post in

Creates a new forum post.

PostdataValue
titleThe title of the new forum post.
contentThe body of the new forum post.
new ApiClient({
 apimethod: 'forumchannels/{guid}/forumtopics/add',
 method: 'post',
 postdata: {
 title: 'Question about leads...',
 content: 'How do you want us to categorize them?'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Update a forum post

URI: forumtopics/{guid}/update

{guid}: The forum post to update

Updates an existing forum post.

PostdataValue
titleThe new title for the existing forum post.
contentThe new body for the existing forum post.
new ApiClient({
 apimethod: 'forumtopics/{guid}/update',
 method: 'post',
 postdata: {
 title: 'New Title',
 content: 'Updated body of the forum post'
 }
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Reply to a forum post

URI: forumtopics/{guid}/forumposts/add

{guid}: The forum post to reply to

Replies to an existing forum post.

PostdataValue
contentText body of the reply to the forum post.
new ApiClient({
 apimethod: 'forumtopics/{guid}/forumposts/add',
 method: 'post',
 postdata: {
 content: 'This is a reply to the forum post'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View replies to a forum post

URI: forumtopics/{guid}/forumposts/view

{guid}: The forum post to view replies from

Returns all of the replies to the specified forum post.

new ApiClient({
 apimethod: 'forumtopics/{guid}/forumposts/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Microblogs

The Igloo API has the following endpoints to work with microblogs:

View all microblogs

URI: microblogchannels/view_all

Return all microblogs from the Igloo community.

new ApiClient({
 apimethod: 'microblogchannels/view_all',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View a microblog

URI: microblogchannels/{guid}/view

{guid}: The microblog to view.

Returns information about the microblog channel.

new ApiClient({
 apimethod: 'microblogchannels/{guid}/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View a microblog post

URI: microblogposts/{guid}/view

{guid}: The microblog post to view.

Returns information about the microblog post.

new ApiClient({
 apimethod: 'microblogposts/{guid}/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create microblog post

URI: microblogposts/{guid}/add

{guid}: The microblog channel to create the post in.

Creates a new microblog post.

PostdataValue
bodyThe text of the microblog post. HTML can be injected here.
new ApiClient({
 apimethod: 'microblogposts/{guid}/add',
 method: 'post',
 postdata: {
 body: 'Monday morning meeting minutes have been posted for review.'
 }
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Update microblog post

URI: microblogposts/{guid}/update

{guid}: The microblog channel to create the post in.

Edits an existing microblog post.

PostdataValue
bodyThe new text of the microblog post. HTML can be injected here.
new ApiClient({
 apimethod: 'microblogposts/{guid}/update',
 method: 'post',
 postdata: {
 body: ''
 }
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Objects

The Igloo API has the following endpoints to work with objects:

View an object

URI: objects/{guid}/view

{guid}: The object you want to view.

Returns the object specified by the GUID.

new ApiClient({
 apimethod: 'objects/{guid}/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View child objects

URI: objects/{guid}/children

{guid}: The object you want to view the children of.

Returns all of the child objects of the object that was specified by the GUID.

QueryparamsValue
maxcountSpecify the maximum number of objects to return.
startindexSupply an integer value to specify where in the index to start returning blog articles.
includefuturepublishedSet to false by default. Set to True to include articles to be published at a future date in the index.
new ApiClient({
 apimethod: 'objects/{guid}/children',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

The Igloo API has the following endpoints to work with the platform search engine:

Search for content

URI: search/content

Searches the entire community and returns the results in an array.

QueryparamsValue
qString text containing the search query
new ApiClient({
 apimethod: 'search/content',
 method: 'get',
 queryparams: {
 q: 'Hello World'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result.response.value.hit);
 }
});

Tasks

The Igloo API has the following endpoints to work with tasks:

Create a task channel

URI: taskchannels/{guid}/create

{guid}: The page or space to create the task channel under.

Create a task channel under the given parent that will contain tasks.

Inspect the DOM elements while viewing the Site Manager to obtain the GUID of a page or space

new ApiClient({
 apimethod: 'taskchannels/{guid}/create',
 method: 'post',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a task

URI: /.tasks/socialtask/Create

{guid}: The task channel to create the task in.

Create a new task.

PostdataValue
parentIdGUID of the Task Channel to create a new task in
titleThe title of the task
descriptionThe text body of the task
importanceSets priority of the task, Low/Normal/High. Default is normal, omit for low
new ApiClient({
 apipath: '/.tasks/socialtask/',
 apimethod: 'Create',
 method: 'post',
 postdata: {
 parentId: {guid}, //GUID of the Task Channel to create this task in
 title: 'New Task',
 description: 'Specific details of this task.',
 importance: 100
 },
 onSuccess: function (responseText) {
 // Code here...
 }
});

Create a private task

URI: /.tasks/socialtask/Create

Create a new task that is private and only visible to the user.

PostdataValue
titleThe title of the task
descriptionThe text body of the task
IsPrivateBoolean, set to true to make this task private
importanceSets priority of the task, Low/Normal/High. Default is normal, omit for low
new ApiClient({
 apipath: '/.tasks/socialtask/',
 apimethod: 'Create',
 method: 'post',
 postdata: {
 title: 'New Private Task',
 description: 'Specific details of this private task.',
 IsPrivate: true,
 importance: 100
 },
 onSuccess: function (responseText) {
 // Code here...
 }
});

Users

The Igloo API has the following endpoints to work with users:

View a user persona

URI: users/{guid}/view

{guid}: The user account to view.

Returns the basic information associated with a user account:

FieldValue
addressStreet address as entered by the user.
bioBiography as entered by the user.
companyString for the user's company.
emailString that contains the user's email address.
id{guid} of the user account.
name.firstNameString containing the user's first name.
name.fullNameString containing the user's full name.
name.lastNameString containing the user's last name.
phoneThe user's phone number.
smsAddressThe user's mobile phone number.
websiteString for the user's website.
new ApiClient({
 apimethod: 'users/{guid}/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

View a user profile

URI: users/{guid}/viewprofile

{guid}: The user account to view.

Returns an array of user profile items that have been populated.

Fields that have not been populated by the user will not be returned

FieldValue
addressStreet address as entered by the user.
address2String that contains the second line of the address.
associationsString for any associations the user belongs to.
bioBiography as entered by the user.
birthdateUser's birthday.
blogString containing URL link to the user's external blog website.
busphoneString for the user's business phone number.
buswebsiteString containing URL link to the user's business website.
cellphoneString for the user's cell phone number.
cityString containing the city the user lives in.
companyString for the user's company.
countryCountry the user resides in.
departmentString for the department the user works under.
extensionString containing the user's telephone extension number.
faxString for the user's fax number.
genderThe user's gender.
hobbiesString containing a comma delimited list of the user's hobbies.
i_report_toString containing the name of the user that this specific user reports to.
i_report_to_emailString containing the email address of this user's manager.
im_aolString containing the user's AOL username.
im_googletalkString containing the user's Google Talk username.
im_msnString containing the user's MSN username.
im_skypeString containing the user's Skype username.
interestsString containing a comma delimited list of the user's interests.
isSAMLField reflects whether or not the user is enabled for single sign-on.
managedByLdapInteger value set to 1 or 0, depending on whether or not users are synchronized with a corporate Active Directory.
occupationString containing the user's job title/occupation.
s_facebookString containing URL link to the user's Facebook profile.
s_googleString containing URL link to the user's Google+ profile.
s_linkedinString containing URL link to the user's LinkedIn profile.
s_twitterString containing URL link to the user's Twitter profile.
sectorString containing the user's field/sector of employment.
skillsString containing a comma delimited list of the user's skills.
skypeforbusinessThe user's online status in Skype for Business.
stateString containing the user's Province, State, or Region.
statusField that reflects the user's online status inside Igloo.
websiteString containing URL link to the user's external website.
zipcodeString that contains the user's zip or postal code.
new ApiClient({
 apimethod: 'users/{guid}/viewprofile',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a new user

URI: users/create

Create a new user account.

PostdataValue
emailEmail address of the user, which becomes their Igloo login id.
firstNameString for the user's first name.
lastNameString for the user's last name.
passwordString that contains the password for the new user.
sendWelcomeMessageBoolean value that controls whether or not the user will receive the Welcome Message.
var newUser = new ApiClient({
 apimethod: 'users/create',
 method: 'post',
 postdata: {
 email: 'tmurphy@igloosoftware.com',
 firstName: 'Tex',
 lastName: 'Murphy',
 password: 'strong password',
 sendWelcomeMessage: false
 }
});

Update a user profile

URI: users/{guid}/update

{guid}: The user account to update.

Update user profile fields.

PostdataValue
igval_addressString that contains the user's address.
igval_address2String that contains the second line of the address.
igval_associationsString for any associations the user belongs to.
igval_bioBiography as entered by the user.
igval_birthdateUser's birthday.
igval_blogString containing URL link to the user's external blog website.
igval_busphoneString for the user's business phone number.
igval_buswebsitetring containing URL link to the user's business website.
igval_cellphoneString for the user's cell phone number.
igval_cityString containing the city the user lives in.
igval_companyString containing the name of the company the user works for.
igval_countryCountry the user resides in.
igval_departmentString for the department the user works under.
igval_extensionString containing the user's telephone extension number.
igval_faxString for the user's fax number.
igval_genderThe user's gender.
igval_hobbiesString containing a comma delimited list of the user's hobbies.
igval_i_report_toString containing the name of the user that this specific user reports to.
igval_i_report_to_emailString containing the email address of this user's manager.
igval_im_aolString containing the user's AOL username.
igval_im_googletalkString containing the user's Google Talk username.
igval_im_msnString containing the user's MSN username.
igval_im_skypeString containing the user's Skype username.
igval_interestsString containing a comma delimited list of the user's interests.
igval_occupationString containing the user's job title/occupation.
igval_s_facebookString containing URL link to the user's Facebook profile.
igval_s_googleString containing URL link to the user's Google+ profile.
igval_s_linkedinString containing URL link to the user's LinkedIn profile.
igval_s_twitterString containing URL link to the user's Twitter profile.
igval_sectorString containing the user's field/sector of employment.
igval_skillsString containing a comma delimited list of the user's skills.
igval_stateString containing the user's Province, State, or Region.
igval_statusField that reflects the user's online status inside Igloo.
igval_websiteString containing URL link to the user's external website.
igval_zipcodeString that contains the user's zip or postal code.
new ApiClient({
 apimethod: 'users/{guid}/update',
 method: 'post',
 postdata: {
 igval_address: '2nd floor office of the Ritz Hotel',
 igval_address2: 'Chandler Ave',
 igval_associations: 'West Coast Tango Dance Instructors Guild',
 igval_bio: 'Private Investigator and Dance Instructor',
 igval_birthdate: '3/04/1955 12:00:00 AM',
 igval_city: 'San Franciso',
 igval_country: 'United States of America',
 igval_fax: '555-867-5309',
 igval_gender: 'Male',
 igval_hobbies: 'Teaching dance, collecting antique computers',
 igval_state: 'California'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Wikis

The Igloo API has the following endpoints to work with wikis:

View a wiki article

URI: wikiarticles/{guid}/view

{guid}: The wiki containing the wiki article to view.

View a specific wiki article.

new ApiClient({
 apimethod: 'wikiarticles/{guid}/view',
 method: 'get',
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a wiki

URI: wiki/{guid}/create

{guid}: The page or space to create the wiki under.

Create a wiki that will contain wiki articles.

Inspect the DOM elements while viewing the Site Manager to obtain the GUID of a page or space

PostdataValue
titleString value containing the title of the wiki to create.
returnNavBoolean value that will take you directly to the newly created wiki if set to true.
showInNavBoolean value to toggle whether or not this wiki will be hidden in the navigation or not.
new ApiClient({
 apimethod: 'wiki/{guid}/create',
 method: 'post',
 postdata: {
 title: 'Knowledge Base',
 returnNav: false,
 showInNav: true
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Create a wiki article

URI: wikiarticles/{guid}/create

{guid}: The wiki to create the wiki article in.

Create a new wiki article.

PostdataValue
titleString value containing the title of the wiki to create.
contentThe body of the wiki article. HTML can be injected here.
new ApiClient({
 apimethod: 'wikiarticles/{guid}/create',
 method: 'post',
 postdata: {
 title: 'SOPs',
 content: 'This document outlines department specific SOPs...'
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});

Update a wiki article

URI: wikiarticles/{guid}/update

{guid}: The wiki that contains the wiki article to update.

Update an existing wiki article.

PostdataValue
titleString value containing the title of the wiki to create.
contentThe body of the wiki article. HTML can be injected here.
lockedBoolean used to enable or disable commenting on the wiki article.
new ApiClient({
 apimethod: 'wikiarticles/{guid}/update',
 method: 'post',
 postdata: {
 title: 'On-Call Policies',
 content: 'The following updates have been made...',
 locked: false
 },
 onSuccess: function (responseText) {
 var result = JSON.parse(responseText);

 // Code here...
 console.log(result);
 }
});




 

Viewed 1,461 times