Anvil populates the function arguments from urlencoded parameters (just like a query string), not from json.
This:
curl 'https://app_api_url/test' --data-urlencode 'who=me' --data-urlencode 'what=this'
Sends this in the body:
who=me&what=this
Unlike a query string appended to the URL in a GET, this request is a POST and the query string is sent in the body, so there is no 2000-ish character limit on the length. For example it is possible to send a text file with this:
curl 'https://app_api_url/test' --data-urlencode "file1=`cat file1`" --data-urlencode "file2=`cat file2`"
I haven’t used Unix in 30 years, I didn’t remember how to do it, but my fingers did and were able to type this command by themselves! And it worked! Magic fingers!
Still… please let me know if this is not the right way.