REST API for ODK Aggregate

I wanted to start a new topic on brainstorming requirements for a REST API for ODK Aggregate. We started that conversation in another topic, but I thought it'd be easiest to create a new topic focused just on this.

We've been keeping notes in this Google doc:

However, Google Docs isn't the easiest forum for discussion. Instead, I'd love to try out this new Discourse forum. Make a new suggestion or add to an existing one by replying to this topic. As ideas come together, I'll copy them to the Google doc so that we continue to have an organized list.

In comments below, help us brainstorm requirements for a REST API!

Please add as much detail as possible for each endpoint or feature you would like. That'll help us start prioritizing and figuring out implementation strategies.

  • What is the use case or integration you have in mind?
  • How important is the feature?
  • What are current workarounds?

If you're interested, the Google doc also has a list of other REST APIs. Feel free to suggest other APIs you've found helpful to add to that list.

Let me know if you have any questions!

Adding those who participated in the first topic: @yanokwa @LN @Mark_Schormann @Mitch_S @Frank_Dekervel @Xiphware @wonderchook @Andrew.


There doesn't seem to have been much further activity on the document - have you had any further discussions on this topic?
The Add Users endpoint which we suggested is becoming more and more necessary for our deployment.
Would you be interested in setting up a Skype call or some other form of discussion to try move this forward?

Similarly to @Kate_Chapman and @Mark_Schormann (who commented on the referenced thread), we'd be happy to help with some code contribution but aren't able to lead the effort.

Hi Andrew, thanks for bumping this topic!

We've just kicked off a big effort to enable community contribution to the Aggregate code and that work has to be finished first before any API work can begin.

You can read more about that effort at Your team's help there would allow us to move faster not just on Aggregate, but across the entire ecosystem.

As far as alternatives, I took a quick look at the Ona API and the Kobo API and both of those don't have the ability to add users programmatically, so it looks like the Selenium approach you have is likely the best alternative.

Has the ODK Aggregate REST API (for ODK1.x that is) basically been shelved, in light of everything moving to the ODK 2.0 framework going forward? ODK2.0 has its own REST-based API, but, from my limited reading, its largely incompatible with how ODK Aggregate/Collect interact presently?

@Xiphware The ODK 1 TSC is very committed to evolving ODK 1 and the large ecosystem around the tools. And that's an easy thing to say, but the proof is in the pudding.

The ODK 1 TSC meets every two weeks and we've been shipping lots of features to Collect, Briefcase, XLSForm, JavaRosa, etc. It's true that we've been slower to improve Aggregate, but that is a difficult codebase to evolve (PRs welcome!)

I hear you that a RESTful server for ODK 1 is needed and I'm hoping to have some news to share on that front in a few weeks.

Well, I was rather hoping I could just drop off the radar for 6 months, and come back to find somebody else had done all the heavy lifting wrt a RESTful ODK Aggregate/server... So I guess I can wait a few more weeks... :wink:

I wanted to make sure that everyone tracking this topic saw @yanokwa's announcement about the alpha release of ODK Central. Central is a new ODK 1 server, and we decided from the start that we wanted it to be extensible through a RESTful API.

The alpha release includes endpoints for users, forms, and submissions. It also includes an OData feed for live-updating reports in Excel, Power BI, or Tableau.

We think it's important to get early feedback from the community about what additional API endpoints and other features you'd like to see in Central. If you're interested in trying Central, you can find more information in @yanokwa's original post:

I also wanted to quote from the last section of @yanokwa's post: