MAAS add machine api

Hi,
I was trying add machine using maas APIs in python but end up getting 400 Client Error.
The code i used is

from oauthlib.oauth1 import SIGNATURE_PLAINTEXT
from requests_oauthlib import OAuth1Session
from .config import maas_url,maas_apikey

MAAS_HOST = maas_url
CONSUMER_KEY, CONSUMER_TOKEN, SECRET = maas_apikey.split(":")

maas = OAuth1Session(CONSUMER_KEY, resource_owner_key=CONSUMER_TOKEN, resource_owner_secret=SECRET, signature_method=SIGNATURE_PLAINTEXT)

def addMaasNode(data):
    node = maas.post(f'{maas_url}/api/2.0/machines/',json=data)
    node.raise_for_status()
    return node.json()

data = {}
data['hostname']='dummy'
data['architecture']='amd64'
data['mac_addresses']='02:03:04:05:06:07'
data['power_type']='ipmi'
data['power_parameters_param']={'power_user': 'maas', 'power_driver': 'LAN_2_0', 'power_address': '10.219.104.109', 'cipher_suite_id': '3', 'power_boot_type': 'efi', 'privilege_level': 'ADMIN', 'workaround_flags': ['opensesspriv'], 'k_g': '', 'power_pass': 'Odsoqv3hz9r2', 'mac_address': '02:03:04:05:06:07'}
print(addMaasNode(data))

And for the above code i got the following output:

Traceback (most recent call last):
  File "/home/netbox/mni/./src/cli_utils.py", line 21, in <module>
    print(addMaasNode(data))
  File "/home/netbox/mni/src/utils/maas.py", line 61, in addMaasNode
    node.raise_for_status()
  File "/usr/lib/python3/dist-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://10.209.184.36:5240/MAAS//api/2.0/machines/

i was able to create a node when i put power_type as ‘manual’ and removed power_parameters_param.(which is written as ‘power_parameters_{param’ in official maas API documentation) .
Any help is appreciated.
Thanking you in advance for your help.

You have a double slash in the URL http://10.209.184.36:5240/MAAS//api/2.0/machines/ , this might be the issue!

still not working

data:{'hostname': 'demo', 'architecture': 'amd64', 'mac_addresses': '02:03:04:05:06:07', 'power_type': 'ipmi', 'power_parameters_param': {'power_user': 'maas', 'power_driver': 'LAN_2_0', 'power_address': '10.219.104.109', 'cipher_suite_id': '3', 'power_boot_type': 'efi', 'privilege_level': 'ADMIN', 'workaround_flags': ['opensesspriv'], 'k_g': '', 'power_pass': 'Odsoqv3hz9r2', 'mac_address': '02:03:04:05:06:07'}}
Traceback (most recent call last):
  File "/home/netbox/mni/./src/cli_utils.py", line 31, in <module>
    print(addMaasNode(data))
  File "/home/netbox/mni/src/utils/maas.py", line 62, in addMaasNode
    node.raise_for_status()
  File "/home/netbox/mni/venv/lib/python3.10/site-packages/requests/models.py", line 1021, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://10.209.184.36:5240/MAAS/api/2.0/machines/

Looks like there is a typo in the docs (missing bracket). You can take a look here for a request example https://github.com/maas/maas/blob/54ef20d60e9dccdf7fea80c218e142eaf771ec37/src/maasserver/api/tests/test_machines.py#L196 .

In short, you don’t have to specify a json power_parameters_param={..} but you have to add a dedicated parameter for every power_parameter in the base object like

{
"hostname": "dummy",
"architecture": "amd64",
...
"power_parameters_power_address": "192.168.1.1",
"power_parameters_workaround_flags": ["authcap"]
...
}

thanks able to add node now