The Cypher API is difficult to work with. For example, in order to get usage data (api3_reference#get-/users/-id-/visits) I have to loop through every user on the platform and request visit information via an API call for each user. There is no API endpoint for "All visits in the last x days" or something similar.
The same is true for something like Grades (/api3_reference#get-/classes/-id-/assignments/-assessment_id-/grades). I first have to fetch all Classes, then loop through each Class and fetch each Assignment, then loop through each Assignment and fetch each Grade.
With the API designed in this way, it creates a huge amount of wasted server load for both Cypher and our organisation.
I then saw the Webhooks section of API v3 (/api3_reference#post-/webhooks). This looked like it might provide what I need because Cypher would just tell our servers when something changed.
However, I couldn't get it to work. When trying to create a webhook I was receiving a message "Connect is not enabled". When I reached out to support I was told that the Webhooks functionality is not actually available via the API, despite being in the spec. I was told to enquire about the Connect app, but I have since learnt that this is not an options for us.
In conclusion, using the existing API is cumbersome and wasteful in terms of calls to the Cypher servers. Webhooks would be a good idea, but they are not implemented via the API, despite being in the spec.
It is possible to get to some Webhooks via the Automation App, but these do not provide access to all data, such as user visits.