OData API
=========
* The APIs are all readonly and follow the `OData standard `_. See that link for more details.
* All OData calls also include links to return metadata about the return if that is needed.
An example can be found by issuing an authenticated
``GET`` to ``https://trialdb.tpsdb.com/api/$metadata#People``.
* We return a max of 1000 records per request.
If more than that match, then the result will include the link to the next page (via the ``$skip`` parameter).
* Authentication to the OData API requires a user with both the ``Developer`` and ``APIOnly`` roles
(``APIOnly`` might not exist and will need to be created).
.. important::
The examples below show using curl, a command line tool for transferring data using various URL protocols.
This tool comes on a Mac and can be downloaded for Windows.
OData uses a `$` (dollar sign) in the URL for filter operations.
Curl does not properly encode the $ sign.
So, in the following curl commands, we show the dollar sign as escaped with a `\\` in front of it.
The acutal URL that will be used does not have that backslash.
.. note::
The examples below explicitly set the authorization header, but you can also set it like so::
curl --user "apionly:MyApiPasswordToRuleThemAll" \
"https://trialdb.tpsdb.com/api/People?\$top=5"
To encode credentials as shown in the examples below, you can use a website
such as `Base64 Conversion Utility `_.
People
-----------------
Get the top 5 people records. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/People?\$top=5"
Get the people records that have been modified since ``2015-09-01``::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/People?\$filter=ModifiedDate+ge+2015-09-01"
Contributions
----------------------------
Get the top 5 contribution records. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/Contributions?\$top=5"
Get all contributions since ``2014-12-30``. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/Contributions?\$filter=ContributionDate+ge+2014-12-30"
Same as above, but with greater time granularity. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/Contributions?\$filter=ContributionDate+ge+2014-12-30T23:59:59.99Z"
Pledges
-------
Get the top 5 pledge records. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/Pledges?\$top=5"
Funds
-----
Get contribution fund details. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA=="
"https://trialdb.tpsdb.com/api/Funds"
Lookups
-------
Lookups are good to find more details about records (i.e. such as campuses and/or family positions). They have defaults in our system, but allow for additional configurable lookups customized by the church.
Get all marital status lookups. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/lookup/MaritalStatuses"
Get all campus lookups. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/lookup/Campuses"
Get all family position lookups. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/lookup/FamilyPositions"
Get all contribution type lookups. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/lookup/ContributionTypes"
Get all gender lookups. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/lookup/Genders"
Organizations
-------------
Get the organization member under org "2181006" with a people ID of "1". ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/OrganizationMembers?\$filter=OrganizationId+eq+2181006+and+PeopleId+eq+1"
Get all organizations. ::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/api/Organizations"
Custom
------
You can Get the results of any SQL query using the URL
``https://trialdb.tpsdb.com/CustomAPI/file`` where file is the name of the SQLScript in Special Content.
* You can also pass parameters to the script using the QueryString.
These parameters will be available inside your SQL as @ variables.
For example if you passed the querystring ?dt=5-5-2000&div=121 at the end of the URL,
you would have @dt and @div available to your SQL to filter by.
* The same Authentication Header applies this case (Basic Authentication, Https protocol, APIOnly role)
.. important::
The SQLScript you use must begin with the comment line ``--API`` as in the example below.
If the following SQLScript called ``mytest`` is in your `Special Content > SQLScripts`
.. code-block:: sql
--API
SELECT TOP 5
PeopleId,
FirstName,
PreferredName,
LastName,
PrimaryCity,
Age
FROM dbo.People
WHERE PositionInFamilyId = 10 -- Primary
AND GenderId = 1 -- Male
AND MemberStatusId = 10 -- Member
AND PrimaryCity = @city
AND age > @olderthan
And you have an APIOnly role user with a username of apionly and trialdb is your church's database,
then you can run the following command. This command actually works since trialdb is a real database with fake people.
Note that the \ at the end of the first line may need to be removed if you run this on windows::
curl -H "Authorization: Basic YXBpb25seTpNeUFwaVBhc3N3b3JkVG9SdWxlVGhlbUFsbA==" \
"https://trialdb.tpsdb.com/CustomAPI/mytest?olderthan=65&city=Bartlett"
And your results will be something like the following JSON::
[
{
"PeopleId": 2100183,
"FirstName": "Charles",
"PreferredName": "Charles",
"LastName": "Brown",
"PrimaryCity": "Bartlett",
"Age": 76
},
{
"PeopleId": 2101567,
"FirstName": "James",
"PreferredName": "James",
"LastName": "Collins",
"PrimaryCity": "Bartlett",
"Age": 95
},
{
"PeopleId": 2106865,
"FirstName": "Blake",
"PreferredName": "Blake",
"LastName": "Ministry",
"PrimaryCity": "Bartlett",
"Age": 70
},
{
"PeopleId": 2106957,
"FirstName": "Anthony",
"PreferredName": "Anthony",
"LastName": "Damron",
"PrimaryCity": "Bartlett",
"Age": 68
},
{
"PeopleId": 2107964,
"FirstName": "Paul",
"PreferredName": "Paul",
"LastName": "Elmore",
"PrimaryCity": "Bartlett",
"Age": 74
}
]