I was pretty close. I needed to add the security token and the form ID. What I was really searching for was this documentation about cURL and Drupal: http://drupal.org/node/80548 . I'm basically using this now but originally I wanted to get along with a shell script only. Actually I'm trying to export images from iPhoto to Drupal using AppleScript as I didn't want to dive into plugin development and you can call shell scripts from AppleScript. What I learned: The security token (form_token) depends on the session ID (plus form ID and private key) and thus you need to create a session with the client you want to use to create the content (or create a cookie with such session ID). Just send a request for the add- page and extract the token from the HTML form. This token can be used from now on to add content using a tool like cURL. Checking the resulting HTML pages I also got confused because the redirect did not work with cURL so I didn't get the success message I expected though the creation was successful. Here's my working cURL code: # login curl http://localhost/drupal/?q=user \ -s \ -c cookie.txt \ -b cookie.txt \ -F 'name=user' \ -F 'pass=pass' \ -F 'form_id=user_login' \ -F 'op=Log in' \ --output response0.html # get form curl http://localhost/drupal/?q=node/add/page \ -s \ -c cookie.txt \ -b cookie.txt \ --output response1.html # -> extract token from response1.html (/edit-page-node-form-form- token" *value="([^"]*)"/) # add page # -> use extracted token curl http://localhost/drupal/?q=node/add/page \ -s \ -c cookie.txt \ -b cookie.txt \ -F 'title=xyz' \ -F 'body=abc' \ -F 'form_id=page_node_form' \ -F 'form_token=63fe773e820d2a4565720ab3bd0fc991' \ -F 'status=1' \ -F 'revision=1' \ -F 'op=Save' \ --output response2.html