I could not find many references to it, but in the tutorial that you indicated, the following is mentioned:
The format of the string and the following arguments are Py_BuildValue (XXX, so I really should have described it now!). Call for example
PyEval_CallFunction(obj, "iii", a, b, c);
equivalently
PyEval_CallObject(obj, Py_BuildValue("iii", a, b, c));
I believe PyEval_CallFunction not a public API, as its value seems rather limited. There is not much difference between them. But then again, I'm not very involved in python extensions, so this is just my view on this.
PyEval_CallObject itself is a macro around PyEval_CallObjectWithKeywords .
#define PyEval_CallObject(func,arg) \ PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
On the question "What is an open API?" here is the last post from Martin vs Lewis:
Just to emphasize and support Georg Explanation: The API is not defined through the documentation, but instead primarily through header files. All functions declared as PyAPI_FUNC and do not start with _Py are public APIs. There were a lot of undocumented APIs (before 1.4, there was no API documentation at all, just an extension module tutorial); More and more APIs are being documented these days.
http://mail.python.org/pipermail/python-dev/2011-February/107973.html