Not really. But the trickiest ones to get right in curl are the two http POST methods - (1) for uploading a new form and, even more so, (2) submitting a multipart form submission - as described above. The rest of the APIs are http GETs, which are fairly straight-forward to translate into curl. These include:
List of forms:
curl -v -X GET https://opendatakit.appspot.com/formList
which returns (emphasis added):
< HTTP/2 200
< content-type: text/xml;charset=utf-8
< x-cloud-trace-context: 10947aa770a888cf0ffd142986c6707f;o=1
< date: Mon, 14 Jan 2019 20:10:47 GMT
< server: Google Frontend
< content-length: 106
< alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
<forms>
<form url="https://opendatakit.appspot.com/formXml?formId=all-widgets">All widgets</form>
</forms>
Get a form (using URL obtained from formList):
curl -v -X GET 'https://opendatakit.appspot.com/formXml?formId=all-widgets'
which returns:
< HTTP/2 200
< content-type: text/xml;charset=utf-8
< content-disposition: attachment; filename="All_widgets.xml";
< x-cloud-trace-context: e4a864e7cff083c74b98136b648dcad1;o=1
< date: Mon, 14 Jan 2019 20:12:13 GMT
< server: Google Frontend
< content-length: 51504
< alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
<?xml version="1.0"?>
<h:html xmlns="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:jr="http://openrosa.org/javarosa" xmlns:odk="http://www.opendatakit.org/xforms" xmlns:orx="http://openrosa.org/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<h:head><!-- ODK Aggregate upload time: 2018-08-17T16:07:57.243+0000 on https://opendatakit.appspot.com -->
<h:title>All widgets</h:title>
...
</h:body>
</h:html>
Get form manifest/attachments
curl -v -X GET 'https://opendatakit.appspot.com/xformsManifest?formId=all-widgets'
which returns:
< HTTP/2 200
< x-openrosa-version: 1.0
< x-openrosa-accept-content-length: 10485760
< content-type: text/xml;charset=utf-8
< x-cloud-trace-context: 83abba5b008de6f65aaa53b00069f0a5
< date: Mon, 14 Jan 2019 20:17:14 GMT
< server: Google Frontend
< content-length: 2210
< alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
<manifest xmlns="http://openrosa.org/xforms/xformsManifest">
<mediaFile><filename>d.jpg</filename><hash>md5:42ce233d595e0b471f68bbadf3a96c74</hash>
<downloadUrl>https://opendatakit.appspot.com/xformsDownload?blobKey=aggregate.opendatakit.org%3AFormInfo%5B%40version%3D1+and+%40uiVersion%3D0%5D%2F_form_info%5B%40key%3Dmd5%3Acdb4409d837e35990f1cca789e61eb62%5D%2F_form_info_fileset%5B%40ordinal%3D1%5D%2FmanifestFileset%5B%40ordinal%3D1%5D&as_attachment=true</downloadUrl></mediaFile>
...
</manifest>
Get list of submissions for a form (chunked):
curl -v -X GET 'https://opendatakit.appspot.com/view/submissionList?formId=all-widgets'
< HTTP/2 200
< x-openrosa-version: 1.0
< x-openrosa-accept-content-length: 10485760
< content-type: text/xml;charset=utf-8
< x-cloud-trace-context: e8f00313b0fccf561cc6f268f9173eb0
< date: Mon, 14 Jan 2019 20:19:48 GMT
< server: Google Frontend
< content-length: 68860
< alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
<idChunk xmlns="http://opendatakit.org/submissions"><idList><id>uuid:6136f5c9-238e-40f5-ae4c-5878b88cc13d</id>
<id>uuid:a2b5c558-1b8d-40e8-adb8-8507ef5e1529</id>
<id>uuid:ebbef628-3b9f-4725-9b2d-210dae91e525</id>
<id>uuid:405a72f3-6dae-4717-b3a6-07eb4feb7f18</id>
...
</idList><resumptionCursor><cursor xmlns="http://www.opendatakit.org/cursor"><attributeName>_LAST_UPDATE_DATE</attributeName><attributeValue>2019-01-14T17:16:58.168+0000</attributeValue><uriLastReturnedValue>uuid:faa3df1d-3185-494c-a69f-1a5b2e39d87c</uriLastReturnedValue><isForw
For the most part you can just perform an http GET on the appropriate URL (usually constructed from the data received via other GETs...), check for a 200 OK response, and then parse the resulting XML data.
Edit: oh, as @yanokwa indicates, strictly speaking you should probably pass up the --header "X-OpenRosa-Version: 1.0"
header too on all your GETs (although depending on the actual server it may/not always be checked).