What would I like to see from The Raiser’s Edge NXT API?

Everybody always says how rubbish the RE7 API is. I would have to disagree with them thoroughly. There are some serious drawbacks such as not being able to access it directly via the cloud but in terms of coverage it is probably one of the best APIs I have come across. Not only does it cover the data model (which is enormous in itself), it also covers very many areas of the GUI too. Sure there are issues with stability and with lack of documentation but thankfully I have managed to overcome both of these and have been very happy with the API.

So what are my expectations for The Raiser’s Edge NXT API? I don’t have any inside knowledge about this other than what I know is technically possible and what is feasible to do within a reasonable timeframe. I cannot foresee the possibility of asking the API for a constituent form in order to enter data into as you can with RE7. The API will be a REST based data model so that I can ask for a constituent and I will be returned a JSON (or possibly XML) based object to work with. Now if this were RE7 that constituent object would consist of layer upon layer of nested arrays of data. That is how the current CRecord object is but in the REST model this is unwieldy. It may be like that. But hopefully I will also be able to request, for example,  all notes for a given constituent or all attributes. Equally I would like to be able to simply update one note or one attribute rather than the whole object.

One area which is severely lacking in RE7 is the ability to search for data in an easy manner. My workaround has always been to create a SQL query and interrogate the database directly. This is unlikely to be possible with RE NXT. However there are mechanisms for doing this via REST. With other systems (including the CRM system that we use internally) we make use of OData.  This protocol gives me access to individual properties within a REST webservice. For example if I wanted to find a constituent with the last name of Zeidman I would do something like this:

http://www.BlackbaudsRENXTServer.com/Constituents?$filter=LastName eq ‘Zeidman’

Of course you would have to URLEncode it so that it would look something more like this:

http://www.BlackbaudsRENXTServer.com/Constituents?$filter%3DLastName+eq+%27Zeidman%27

OData is extremely powerful as I am able to search child objects too and not just the root. This is extremely difficult to do with RE7 as it requires complex SQL to do so. OData is not just for searching but also for pulling out individual properties too rather than whole objects. This is especially useful of the payload is large (as the constituent object is).

One area that is very power with the RE7 API is the ability to determine an instance of RE7’s meta data which varies between organizations. For example we can ask the API what attributes are available to us to use or what are the entries in the notepad type code table. As a third party developer this is essential. If I am writing software for one organisation I could simply hard code the use of one attribute as I know it is going to be there. However unless I can offer the end user the ability to map fields from a third party application back to RE, the application that I am developing can never be sufficiently generic.

Blackbaud’s model of bringing RE NXT online gradually in phases based on roles is a good one. It means that organizations can retain their third party integrations and customizations (assuming the previous restrictions within the hosting environment are lifted). I can envisage the API as being simply a phase in the rollout of NXT and I for one am very excited about that!

EDIT: Read more about RE NXT in general here: http://npengage.com/nonprofit-technology/2-new-solutions-with-4-big-things-great-news-for-the-nonprofit-sector/