Getting data out of AlumnIQ (API)
AlumnIQ REST API
We have a REST API from which you can get the vast majority of the data unique to your AlumnIQ usage. The API itself is self-documenting. You can see the list of available resources and the documentation for each at: https://example.alumniq.com/api/ (substituting your school's prefix for "example")
Usage of the API requires an API Key, and all requests must be made over SSL (HTTPS).
Our API accepts and returns JSON data, the modern industry standard for similar data transmissions.
In your QA AlumnIQ environment, in addition to the documentation, you will find tools to make test requests against the API and see the responses it returns.
API Quick Guide
PRODUCTION API BASE: https://YOURDOMAIN/api/v1/index.cfm/ QA API BASE: https://qa-YOURDOMAIN/api/v1/index.cfm/ (then put the stubs below on the end) (with your apikey as an apikey=XXX url param -OR- in the body for a put or post)
API Keys
Your API key is not good forever. Pay special attention to the response header x-api-key-days-remaining which will serve as your early warning before your calls start to fail.
To reissue an API key manually, in the AlumnIQ admin under Security > API Keys you can create a new one for immediate use.
Alternatively (and certainly easier to script), you can generate a fresh key by trading in your old non-expired key:
GET /api/v1/index.cfm/exchange?emailaddress=RESPONSIBLE_PARTY_EMAIL_GOES_HERE&apikey=API_KEY_GOES_HERE
An API key is generally good for a year. If you script the /exchange call to run semi-annually, you'll be more than good to run autonomously in perpetuity.
GZip
All http responses from AlumnIQ, including the API, are GZip compressed. Some clients may not handle this scenario by default. Below are some examples of how we've seen this manifest, and how to work around it.
PowerShell
PowerShell's Invoke-WebRequest does not handle gzip compression by default. You need to add an appropriate header to indicate that you want it to handle gzip:
Profiles and Contact Updates
New Profiles
GET /directory/created-since?since=yyyy-mm-dd
new profiles created on or after that day
useful if you're recording who's ever signed in to the portal
Updates to Profiles (VERSION 1/LEGACY)
GET /directory/updates?changeDate=yyyy-mm-dd
all updates that happened on that day
probably want to fetch and process daily
GET /directory/updates-since?since=yyyy-mm-dd
all updates that happened on or after that day
Updates to Profiles (VERSION 2/CURRENT/FALL 2021)
GET /directory/changes/homeaddress?changeDate=yyyy-mm-dd
any changes to home contact information on that date (local time)
optional param: autoprocess (default false). if true, we'll mark these changes as "processed" - meaning we're trusting you to deal with them and will apply them to your system of record.
PUT /directory/changes/homeaddress/{changeid}
marks an individual address update as processed; preferred over the autoprocess flag because the callback can happen after you actually do the update (assuming you do)
GET /directory/changes/workaddress?changeDate=yyyy-mm-dd
any changes to work contact information on that date (local time)
optional param: autoprocess (default false). if true, we'll mark these changes as "processed" - meaning we're trusting you to deal with them and will apply them to your system of record.
PUT /directory/changes/workaddress/{changeid}
marks an individual work address update as processed; preferred over the autoprocess flag because the callback can happen after you actually do the update (assuming you do)
GET /directory/changes/identity?changeDate=yyyy-mm-dd
any changes to identity (name-type and related) information on that date (local time)
optional param: autoprocess (default false). if true, we'll mark these changes as "processed" - meaning we're trusting you to deal with them and will apply them to your system of record.
PUT /directory/changes/identity/{changeid}
marks an individual identity update as processed; preferred over the autoprocess flag because the callback can happen after you actually do the update (assuming you do)
GET /directory/changessince/homeaddress?changeDate=yyyy-mm-dd
any changes to home contact information on or after that date (local time)
GET /directory/changessince/workaddress?changeDate=yyyy-mm-dd
any changes to work contact information on or after that date (local time)
GET /directory/changessince/identity?changeDate=yyyy-mm-dd
any changes to identity (name-type and related) information on or after that date (local time)
coming soon: additional resources for simplified custom field update capture
Loopback
GET /loopback/unprocessed
all unprocessed loopback records
probably want to fetch and process daily
PUT /loopback/unprocessed?loopbackIds=1,2,3,4
tell AlumnIQ you've properly handled the loopback record
Memberships
Getting New Ones
GET /memb/memberships?createdRangeBegin=yyyy-mm-dd&createdRangeEnd=yyyy-mm-dd
pay attention to the status column
probably want to fetch and process daily
GET /memb/memberships/{membershipId}
membershipId is the AlumnIQ PK for the membership (given to you in the call above)
probably want to fetch and process daily
GET /memb/members/{memberId}
gets an AlumnIQ member record (memberid is found in the call above)
Updating Foreign Keys (and other useful fields)
PUT /memb/members/{memberId} (with a payload)
pass xMemberId to set your member number on this individual
pass xid to set your constituent identifier on this individual
pass overwrite = true to force your values on top of whatever might have already been set for this person
recommend you do this as soon as memberships are added to your database
Transaction Reconciliation
GET /memb/transactions?rangeBegin=yyyy-mm-dd&rangeEnd=yyyy-mm-dd
if you reconcile daily or monthly, this will give you all transactions processed for memberships for the given period
Gifts
Pledge = parent of one or more gifts Gift = dollars to a fund for a term on a frequency Note: event gifts are managed separately
Pledges and Gifts
GET /giving/pledges/?date=yyyy-mm-dd
all pledges created on that date
probably want to fetch and process daily
GET /giving/gifts/?date=yyyy-mm-dd
all gifts created on that date
a more loosely formed version of the prior call
GET /giving/gifts/cancelled?date=yyyy-mm-dd
any gifts cancelled on the given date
you'll need to call this to find out if you need to term a gift already booked
probably want to fetch and process daily
Payments and Transactions
GET /giving/giftpayments/?date=yyyy-mm-dd
all payments processed on that date
probably want to fetch and process daily
Events
Event Metadata
Events have a lifecycle. Creation, operation, and then closure. Closure is a deliberate action taken by the event manager to say "we're done and the data will not change further."
Consider that when choosing how to add event attendee and financial data into Advance.
GET /events
three options for filters:
onOrAfter=yyyy-mm-dd
createdOnOrAfter=yyyy-mm-dd
closedOnOrAfter=yyyy-mm-dd
GET /events/{eventid}
neat feature: eventid = the AlumnIQ event id. But if you put the Advance event ID on the event, you can also fetch by the Advance event ID using a slightly different syntax.
Advance event ID = b1234
then GET /events/x-b1234 will work too
GET /events/{eventid}/activities
activity metadata
Attendees
A few small pointers to guide you:
Reservation = the party. A reservation has one or more Person records under it.
The first Person is the primary registrant, and the one responsible for payment (and hard credited for the gift as a result)
an individual reservation may have multiple transactions executed against it (this is not how iModules works)
GET /events/{eventid}/attendees
all people registered regardless of what they signed up for
GET /events/activities/{activityid}/attendees
all people signed up for this activity specifically
PUT /attendees/{personid}
Update an individual human's registration data
xid = 12412352
Finances and Accounting
GET /events/transactions?txDate=yyyy-mm-dd
all transactions regardless of method that happened on that date
primarily helpful for credit card reconciliation purposes
GET /events/gifts?giftDate=yyyy-mm-dd
just gifts received and paid on the given date (reminder: only gifts given incidentally as part of event registration)
GET /events/{eventId}/transactions/detail
only the transactions related to a specific event
useful after the event is closed (maybe)
GET /events/{eventId}/balance-sheet
tells you where to put actual dollars post-event closure
GET /events/{eventId}/ledger/detail
awesome detail to complement the balance sheet report
tells you how we arrived at the bottom line numbers for this event
Last updated