meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
api:manual [2017/07/20 09:00]
Safak Samiloglu
api:manual [2019/10/01 12:38] (current)
Lauri Elevant
Line 15: Line 15:
 ==== HTTPS ==== ==== HTTPS ====
  
-The first pre-requisite to using the API, is activating the HTTPS feature of DreamApply. We do not expect any serious users interested in utilising the API to be running DreamApply without HTTPS support anyway+The first pre-requisite to securing ​the API, is HTTPS, which is always enabled automatically for all DreamApply ​instances
  
 HTTPS is of course HTTP-within-TLS,​ so TLS provides both confidentiality as well as integrity (via HMAC, to be precise - see [[http://​tools.ietf.org/​html/​rfc5246#​section-6.2.3|6.3.2]]). Given that any API calls are always placed over a secure channel enables us to simplify the API design a lot - most notably to avoid a complicated "​custom"​ HMAC scheme (think: AWS). Also, we would not need to worry about re-play attacks and thus do not need to use a "​nonce"​ to be transmitted with each request (another simplification). HTTPS is of course HTTP-within-TLS,​ so TLS provides both confidentiality as well as integrity (via HMAC, to be precise - see [[http://​tools.ietf.org/​html/​rfc5246#​section-6.2.3|6.3.2]]). Given that any API calls are always placed over a secure channel enables us to simplify the API design a lot - most notably to avoid a complicated "​custom"​ HMAC scheme (think: AWS). Also, we would not need to worry about re-play attacks and thus do not need to use a "​nonce"​ to be transmitted with each request (another simplification).
Line 93: Line 93:
   * Filtering parameters themselves, however, will be combined with a logical ''​AND'',​ hence the API calls will only return matching objects that satisfy all of the filters specified.   * Filtering parameters themselves, however, will be combined with a logical ''​AND'',​ hence the API calls will only return matching objects that satisfy all of the filters specified.
  
-  * Typically, any resource ID's (such as the applicant ID 123 in ''​api/​applicant/​123''​) are used in object keys in any representations enumerating the resources. For example ''/​api/​applicants''​ will return the collection of applicants as a JSON object with the resource IDs as keys. You would expect to see something like that from ''/​api/​applicants'':​+  * Typically, any resource ID's (such as the applicant ID 123 in ''​api/​applicants/​123''​) are used in object keys in any representations enumerating the resources. For example ''/​api/​applicants''​ will return the collection of applicants as a JSON object with the resource IDs as keys. You would expect to see something like that from ''/​api/​applicants'':​
  
   {   {
Line 109: Line 109:
 | [[api:/​api/​journal|/​api/​journal]] | C | GET HEAD | List journal events. **Start point for many integrations** :!: | | [[api:/​api/​journal|/​api/​journal]] | C | GET HEAD | List journal events. **Start point for many integrations** :!: |
 | [[api:/​api/​applicants|/​api/​applicants]] | C | GET HEAD | List applicants using filters set as parameters | | [[api:/​api/​applicants|/​api/​applicants]] | C | GET HEAD | List applicants using filters set as parameters |
 +| [[api:/​api/​applicants|/​api/​applicants]] | C | POST | Create a new applicant / lead and send welcome letter |
 | [[api:/​api/​applicants/​ID|/​api/​applicants/​ID]] | R | GET HEAD | Return information about an applicant | | [[api:/​api/​applicants/​ID|/​api/​applicants/​ID]] | R | GET HEAD | Return information about an applicant |
 | [[api:/​api/​applicants/​ID/​photo|/​api/​applicants/​ID/​photo]] | R | GET HEAD | Get the applicant'​s photo | | [[api:/​api/​applicants/​ID/​photo|/​api/​applicants/​ID/​photo]] | R | GET HEAD | Get the applicant'​s photo |
 +| [[api:/​api/​applicants/​ID/​consents|/​api/​applicants/​ID/​consents]] | C | GET HEAD | Get a list of consents that are associated with an applicant |
 +| [[api:/​api/​applicants/​ID/​consents/​ID|/​api/​applicants/​ID/​consents/​ID]] | A | GET HEAD | Get information about a specific consent associated with an applicant |
 +| [[api:/​api/​applicants/​ID/​emails|/​api/​applicants/​ID/​emails]] | C | GET HEAD | Get a list of emails that are sent to an applicant |
 +| [[api:/​api/​applicants/​ID/​emails/​ID|/​api/​applicants/​ID/​emails/​ID]] | A | GET HEAD | Get information about a specific emails sent to an applicant |
 | [[api:/​api/​applicants/​ID/​trackers|/​api/​applicants/​ID/​trackers]] | C | GET HEAD | Get a list of tracker associations | | [[api:/​api/​applicants/​ID/​trackers|/​api/​applicants/​ID/​trackers]] | C | GET HEAD | Get a list of tracker associations |
 | [[api:/​api/​applicants/​ID/​trackers/​ID|/​api/​applicants/​ID/​trackers/​ID]] | A | GET HEAD | Get information about a specific tracker set on an applicant | | [[api:/​api/​applicants/​ID/​trackers/​ID|/​api/​applicants/​ID/​trackers/​ID]] | A | GET HEAD | Get information about a specific tracker set on an applicant |
Line 125: Line 130:
 | [[api:/​api/​applicants/​ID/​applications|/​api/​applicants/​ID/​applications]] | C | GET HEAD | List applications for this applicant | | [[api:/​api/​applicants/​ID/​applications|/​api/​applicants/​ID/​applications]] | C | GET HEAD | List applications for this applicant |
 | [[api:/​api/​applicants/​ID/​applications/​ID|/​api/​applicants/​ID/​applications/​ID]] | R | GET HEAD | Get information about an applicant application | | [[api:/​api/​applicants/​ID/​applications/​ID|/​api/​applicants/​ID/​applications/​ID]] | R | GET HEAD | Get information about an applicant application |
 +| [[api:/​api/​applicants/​consents|/​api/​applicants/​consents]] | C | GET HEAD | Get a list of all consents |
 +| [[api:/​api/​applicants/​consents/​ID|/​api/​applicants/​consents/​ID]] | R | GET HEAD | Get information about a specific consent |
 | [[api:/​api/​applicants/​trackers|/​api/​applicants/​trackers]] | C | GET HEAD | Get a list of all trackers | | [[api:/​api/​applicants/​trackers|/​api/​applicants/​trackers]] | C | GET HEAD | Get a list of all trackers |
 | [[api:/​api/​applicants/​trackers|/​api/​applicants/​trackers]] | C | POST | Create a new tracker | | [[api:/​api/​applicants/​trackers|/​api/​applicants/​trackers]] | C | POST | Create a new tracker |
Line 141: Line 148:
 | [[api:/​api/​applications/​ID/​offers/​ID/​type|/​api/​applications/​ID/​offers/​ID/​type]] | R | GET HEAD | Get the offer type of a specific application offer | | [[api:/​api/​applications/​ID/​offers/​ID/​type|/​api/​applications/​ID/​offers/​ID/​type]] | R | GET HEAD | Get the offer type of a specific application offer |
 | [[api:/​api/​applications/​ID/​offers/​ID/​type|/​api/​applications/​ID/​offers/​ID/​type]] | R | PUT | Set the offer type of the application offer in question | | [[api:/​api/​applications/​ID/​offers/​ID/​type|/​api/​applications/​ID/​offers/​ID/​type]] | R | PUT | Set the offer type of the application offer in question |
 +| [[api:/​api/​applications/​ID/​offers/​ID/​score/​extra|/​api/​applications/​ID/​offers/​ID/​score/​extra]] | R | GET HEAD | Get the extra score of a specific application offer |
 +| [[api:/​api/​applications/​ID/​offers/​ID/​score/​extra|/​api/​applications/​ID/​offers/​ID/​score/​extra]] | R | PUT | Set the extra score of the application offer in question |
 +| [[api:/​api/​applications/​ID/​offers/​ID/​score/​extra|/​api/​applications/​ID/​offers/​ID/​score/​extra]] | R | DELETE | Clear the extra score of the application offer in question |
 | [[api:/​api/​applications/​ID/​tasks|/​api/​applications/​ID/​tasks]] | C | GET HEAD | List tasks created for this application | | [[api:/​api/​applications/​ID/​tasks|/​api/​applications/​ID/​tasks]] | C | GET HEAD | List tasks created for this application |
 | [[api:/​api/​applications/​ID/​tasks/​ID|/​api/​applications/​ID/​tasks/​ID]] | R | GET HEAD | Get information about a specific application task | | [[api:/​api/​applications/​ID/​tasks/​ID|/​api/​applications/​ID/​tasks/​ID]] | R | GET HEAD | Get information about a specific application task |
Line 151: Line 161:
 | [[api:/​api/​applications/​ID/​documents|/​api/​applications/​ID/​documents]] | C | GET HEAD | Get a list of documents attached to this application | | [[api:/​api/​applications/​ID/​documents|/​api/​applications/​ID/​documents]] | C | GET HEAD | Get a list of documents attached to this application |
 | [[api:/​api/​applications/​ID/​documents/​ID|/​api/​applications/​ID/​documents/​ID]] | R | GET HEAD | Get a specific applicant document (binary data) | | [[api:/​api/​applications/​ID/​documents/​ID|/​api/​applications/​ID/​documents/​ID]] | R | GET HEAD | Get a specific applicant document (binary data) |
 +| [[api:/​api/​applications/​ID/​scores|/​api/​applications/​ID/​scores]] | C | GET HEAD | Get a list of scores for this application |
 | [[api:/​api/​applications/​ID/​studyplans|/​api/​applications/​ID/​studyplans]] | C | GET HEAD | Get a list of study plans attached to this application | | [[api:/​api/​applications/​ID/​studyplans|/​api/​applications/​ID/​studyplans]] | C | GET HEAD | Get a list of study plans attached to this application |
 | [[api:/​api/​applications/​ID/​studyplans/​ID|/​api/​applications/​ID/​studyplans/​ID]] | R | GET HEAD | Get a specific study plan attached to this application | | [[api:/​api/​applications/​ID/​studyplans/​ID|/​api/​applications/​ID/​studyplans/​ID]] | R | GET HEAD | Get a specific study plan attached to this application |
Line 163: Line 174:
 | [[api:/​api/​institutions/​ID/​departments|/​api/​institutions/​ID/​departments]] | C | GET HEAD | List departments under the given institution | | [[api:/​api/​institutions/​ID/​departments|/​api/​institutions/​ID/​departments]] | C | GET HEAD | List departments under the given institution |
 | [[api:/​api/​institutions/​ID/​departments/​ID|/​api/​institutions/​ID/​departments/​ID]] | R | GET HEAD | Show information about a given institution department | | [[api:/​api/​institutions/​ID/​departments/​ID|/​api/​institutions/​ID/​departments/​ID]] | R | GET HEAD | Show information about a given institution department |
-| [[api:/​api/​institutions/​ID/​contacts|/​api/​institutions/​ID/​contacts]] | C | GET HEAD | List contact persons under the given institution | 
-| [[api:/​api/​institutions/​ID/​contacts/​ID|/​api/​institutions/​ID/​contacts/​ID]] | R | GET HEAD | Show information about a given institution contact person | 
 | [[api:/​api/​courses|/​api/​courses]] | C | GET HEAD | List courses using filters set as parameters | | [[api:/​api/​courses|/​api/​courses]] | C | GET HEAD | List courses using filters set as parameters |
 | [[api:/​api/​courses/​ID|/​api/​courses/​ID]] | R | GET HEAD | More detailed information about a specific course | | [[api:/​api/​courses/​ID|/​api/​courses/​ID]] | R | GET HEAD | More detailed information about a specific course |
Line 172: Line 181:
 | [[api:/​api/​invoices/​ID|/​api/​invoices/​ID]] | R | GET HEAD | Get more information about an invoices | | [[api:/​api/​invoices/​ID|/​api/​invoices/​ID]] | R | GET HEAD | Get more information about an invoices |
 | [[api:/​api/​invoices/​ID|/​api/​invoices/​ID]] | R | DELETE | Delete an invoice | | [[api:/​api/​invoices/​ID|/​api/​invoices/​ID]] | R | DELETE | Delete an invoice |
-| [[api:/​api/​invoices/​series|/​api/​invoices/​series]] | R | DELETE ​| List invoice series |+| [[api:/​api/​invoices/​series|/​api/​invoices/​series]] | R | GET HEAD | List invoice series |
 | [[api:/​api/​academic-terms|/​api/​academic-terms]] | R | GET HEAD | Get a list of all academic terms configured | | [[api:/​api/​academic-terms|/​api/​academic-terms]] | R | GET HEAD | Get a list of all academic terms configured |
 | [[api:/​api/​academic-terms/​ID|/​api/​academic-terms/​ID]] | R | GET HEAD | Get information about an academic term | | [[api:/​api/​academic-terms/​ID|/​api/​academic-terms/​ID]] | R | GET HEAD | Get information about an academic term |
Line 182: Line 191:
 | [[api:/​api/​reports|/​api/​reports]] | C | GET HEAD | List all reports available | | [[api:/​api/​reports|/​api/​reports]] | C | GET HEAD | List all reports available |
 | [[api:/​api/​reports/​ReportName|/​api/​reports/​ReportName]] | R | GET HEAD | Request data from a specific report | | [[api:/​api/​reports/​ReportName|/​api/​reports/​ReportName]] | R | GET HEAD | Request data from a specific report |
 +| [[api:/​api/​scoresheets|/​api/​scoresheets]] | C | GET HEAD | List all scoresheets |
 +| [[api:/​api/​scoresheets/​ID|/​api/​scoresheets/​ID]] | R | GET HEAD | Get info about scoresheet |
 +| [[api:/​api/​scoresheets/​ID/​scores|/​api/​scoresheets/​ID/​scores]] | R | GET HEAD | Get scores |
 | [[api:/​api/​tableviews|/​api/​tableviews]] | C | GET HEAD | List all tableviews created with the GUI | | [[api:/​api/​tableviews|/​api/​tableviews]] | C | GET HEAD | List all tableviews created with the GUI |
 | [[api:/​api/​tableviews/​ID|/​api/​tableviews/​ID]] | R | GET HEAD | Get more information about a tableview | | [[api:/​api/​tableviews/​ID|/​api/​tableviews/​ID]] | R | GET HEAD | Get more information about a tableview |
 | [[api:/​api/​tableviews/​ID/​tabledata|/​api/​tableviews/​ID/​tabledata]] | R | GET HEAD | Get the csv data from a tableview | | [[api:/​api/​tableviews/​ID/​tabledata|/​api/​tableviews/​ID/​tabledata]] | R | GET HEAD | Get the csv data from a tableview |
 +| [[api:/​api/​administrators|/​api/​administrators]] | R | GET HEAD | List all administrators in the system |
 +| [[api:/​api/​administrators/​ID|/​api/​administrators/​ID]] | R | GET HEAD | Get information about an administrator |
  
 ♦ The types are as follows: **C**ollection,​ **R**esource,​ **A**ssociation. The latter is an object that represents the relationship between two resources. It is used on one-to-many and many-to-many relationships. However, an association between an applicant and a tracker may carry some information itself, such as the time the association was established. Thus is a special kind of resource. ♦ The types are as follows: **C**ollection,​ **R**esource,​ **A**ssociation. The latter is an object that represents the relationship between two resources. It is used on one-to-many and many-to-many relationships. However, an association between an applicant and a tracker may carry some information itself, such as the time the association was established. Thus is a special kind of resource.
Line 208: Line 222:
 ===== Throttling ​ ===== ===== Throttling ​ =====
  
-All API calls placed to the same API key are, by default, limited to **60 queries per minute** and **600 queries per hour**. Please note that 60 queries/​minute is not the same as 1 query per second, see below.+All API calls placed to the same API key are, by default, limited to **180 queries per minute** and **600 queries per hour**. Please note that 60 queries/​minute is not the same as 1 query per second, see below.
  
 If you exceed your API key queries-per-minute quota, you may start to receive ''​429 Too Many Requests''​ responses. This means that the request was **not** processed and will have to be issued again. If you exceed your API key queries-per-minute quota, you may start to receive ''​429 Too Many Requests''​ responses. This means that the request was **not** processed and will have to be issued again.