While not definitive, you can look at the example in devstack:
https://github.com/openstack-dev/devstack/blob/master/exercises/floating_ips.sh#L165 (https://github.com/openstack-dev/devs...)
if you try that command with --debug it will give you all the raw requests that it made.
Looking at the code, you can see the floating ip call here:
https://github.com/openstack/python-novaclient/blob/master/novaclient/v1_1/shell.py#L1326 (https://github.com/openstack/python-n...)
That points towards this code:
https://github.com/openstack/python-novaclient/blob/master/novaclient/v1_1/servers.py#L329 (https://github.com/openstack/python-n...)
def add_floating_ip(self, server, address):
"""
Add a floating ip to an instance
:param server: The :class: Server
(or its ID) to add an IP to.
:param address: The FloatingIP or string floating address to add.
"""
address = address.ip if hasattr(address, 'ip') else address
self._action('addFloatingIp', server, {'address': address})
It can be compared to the ones that are better documented:
https://github.com/openstack/python-novaclient/blob/master/novaclient/v1_1/servers.py#L562 (https://github.com/openstack/python-n...)
Looks like the doc should say something like:
v2/{tenant_id}/servers/{server_id}/action and specify the addFloatingIp action